https://leetcode-cn.com/problems/count-and-say/

# -*- coding:utf-8 -*-

class Solution(object):
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
        if n == 1:
            return '1'
        pre_str = self.countAndSay(n - 1)
        res = ''
        count = 1
        temp_list = []
        for i in range(len(pre_str) - 1):
            if pre_str[i] == pre_str[i + 1]:
                count += 1
            else:
                temp_list.append(str(count) + pre_str[i])
                count = 1
        if count == 1:
            temp_list.append('1' + pre_str[-1])
        else:
            temp_list.append(str(count) + pre_str[-1])
        for i in range(len(temp_list)):
            res += temp_list[i]
        return res
if __name__ == '__main__':
    n = 5
    print(Solution().countAndSay(n))

思路:就感觉这个简单中等难题有时候就不太懂,有的简单题吧,好像也不属于简单,有的难题好像也不难,害。

这道题递归,每次处理上一次的结果,取一个中间列表,记录遍历的结果,如果当前索引和下一个一样,则标记+1,不一样就在列表中放入‘标记+字符’。

最后再处理一下最后一位,因为要和下一位比较,所以循环比长度少一位,因此最后处理该位。分n个重复和1个独立两种情况,因此单独判断处理,最后将列表转为str即可。

分类: 算法

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注