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 条评论