报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前5项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
理解:
1
被读作"1个1"
,即11
;
11
被读作"2个1"
,即21
;
21
被读作"1个2","1个2"
,即1211
;
1211
被读作"1个1","1个2","2个1"
,即111221
。
给定一个正整数
n
(
1
≤
n
≤
30
)
n(1\leq{n}\leq30)
n(1≤n≤30),输出报数序列的第
n
n
n项。
注意:整数顺序将表示为一个字符串。
示例1:
输入:1
输出:"1"
示例2:
输入:4
输出:"1211"
思路:
- 初始化序列,即报数1时输出1;
- 遍历序列,将前一个与当前的字符判断:
1)若相同,则计数加1,输出计数和字符;
2)若不同,将暂存字符加上当前的计数和字符,同时前一个字符一到当前位置,并将计数设为1。- 将所有字符连起来,返回结果。
class Solution:
def countAndSay(self, n):
seq = '1'
for i in range(n-1):
pre = seq[0]
temp = ''
cnt = 0
for char in seq:
if char == pre:
cnt += 1
else:
temp += str(cnt) + str(pre)
pre = char
cnt = 1
seq = temp + str(cnt) + str(pre)
return seq