LeetCode题意分析&解答38. Count and Say

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode题意分析&解答38. Count and Say相关的知识,希望对你有一定的参考价值。

The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...

1 is read off as "one 1" or 11.
11 is read off as "two 1s" or 21.
21 is read off as "one 2, then one 1" or 1211.

Given an integer n, generate the nth sequence.

Note: The sequence of integers will be represented as a string. 

题意分析:

  本题是将数字从1开始,将当前数字转化为口语对应的数字。比如1口语是1个1,记作11;11读作2个1,记作21;21读作1个2,1个1,记作1211……

  ‘1‘是第一个数字,根据输入的数字n,计算第n个这样的数字。

  说起来比较拗口,对照着例子可以感受一下……

解答:

  如果你理解题意,那么解答就很简单。直接循环,每个数字按照题目要求翻译成口语对应的数字,按照顺序找到第n个返回就行了。

  Leetcode给的评级是Easy,这是对于程序难度来说,然而对于题意来说容易理解偏。

AC代码:

class Solution(object):
    def countAndSay(self, n):
        if n < 2: return 1
        ret_str = 1
        while n > 1:
            temp, current_num = ‘‘, 0
            for i, v in enumerate(ret_str):
                if i > 0 and v != ret_str[i - 1]:
                    temp += str(current_num) + ret_str[i - 1]
                    current_num = 1
                else:
                    current_num += 1
            ret_str = temp + (str(current_num) + ret_str[-1] if current_num != 0 else ‘‘)
            n -= 1
        return ret_str

后话:   

  其实这道题有个很有意思的地方,即输出的数字中永远不可能有大于3的数字,只会出现1、2、3三个数字,你能够证明吗?

以上是关于LeetCode题意分析&解答38. Count and Say的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode题意分析&解答39. Combination Sum

LeetCode题意分析&解答33. Search in Rotated Sorted Array

38. Count and Say

JS leetcode 两数之和解答思路分析

JS leetcode 两数之和解答思路分析

leetcode刷题笔记231 2的幂