报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
n=1. 1
n=2. 11
n=3. 21
n=4. 1211
n=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"
【简单】
【分析】递归。
乍一看,不知道题目意思。。。。看了半天回味过来,题目意思就是:
n=1,输出"1"
n=2,输出 应该是对n=1的输出的读法:对应n=1的输出"1",读"1个1",即"11"
n=3,输出:对应n=2的输出"11"的读法,读"2个1",即"21"
n=4,输出:对应n=3的输出"21"的读法,读"1个2,1个1",即"1211"
依次类推,n=5,输出:“111221”(“1个1,1个2,2个1”)
n=6,输出: “312211”; n=7,输出: “13112221”
class Solution(object):
def countAndSay(self, n):
"""
:type n: int
:rtype: str
"""
k=1
res="1"
while k<n:
res=self.getNext(res)
k+=1
return res
def getNext(self,s):
pre=s[0]
i,count=1,1
cur=""
while i<=len(s):
if i==len(s):
cur+=str(count)+pre
else:
if s[i]==s[i-1]:
count+=1
else:
cur+=str(count)+pre
pre=s[i]
count=1
i+=1
return cur