题目:
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
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 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: “1”
示例 2:
输入: 4
输出: “1211”
代码实现:
class Solution(object):
def countAndSay(self, n):
"""
:type n: int
:rtype: str
"""
if n == 1:
return "1"
else:
s1 = self.countAndSay(n-1)
i = 0
count = 1
s2 = ""
while i < len(s1):
if (len(s1) - i) == 1 or s1[i] != s1[i+1]:
s2 += str(count) + s1[i]
count = 1
else:
count += 1
i += 1
return s2
递归思想:
注意:if (len(s1) - i) == 1 or s1[i] != s1[i+1]:
从左往右判断,先判断是不是到最后一个元素,然后在判断连续两个字符是否相同,顺序千万不能乱!!