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