38.外观数列
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。整数序列中的各项表示为一个字符串。
class Solution: # 递归,即countAndSay(n)处理的是countAndSay(n-1)的结果。
def countAndSay(self, n: int) -> str:
if n == 1: # 如果n=1,返回字符串'1'
return '1'
count_num = 0 # 表示重复的字符数
pre = '' # 前一位的字符
strs = ''
for cur in self.countAndSay(n - 1):
if cur != pre: # 如果当前位与前一位不一样,则把前面的字符输出
if count_num > 0:
strs += str(count_num) + pre
count_num = 1 # 前后不同,count_num自动置1
pre = cur
else: # 如果当前位与前一位一样,那么count_num加一;
count_num += 1
strs += str(count_num) + cur # 最后一位的信息也添加进去
return strs