Count and Say-LeetCode
题目:
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1
is read off as "one 1"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
分析:
翻译一下要做什么:给你一个整数n,返回第n个满足条件的字符串。
题目描述的可能是有些问题,反正第一下没看
懂....
1被认为是“1个1”,所以是“11”;
11被认为是“2个1”,所以是“21”
21被认为是“1个2,1个1”,所以是”1211“
那“1211”呢?
被认为是“1个1,1个2,2个1‘,所以是”111221“.
找到规律,接下来的问题就是很简单了,上代码.
代码:
代码中find函数就是找到在字符串中同样的数字出现的最后一个位置。例如在循环到”1211“时,三次调用find返回的值分别是0,1,3,正是1,2,1分别出现的最后一个位置。
class Solution:
# @return a string
def countAndSay(self, n):
prev='1'
for i in range(1,n):
count = 0
now = ''
point_to = 0
while count < len(prev):
point_to = self.find(prev,prev[count],count)
now+= str(point_to)
now+= str(prev[count])
count += point_to
prev = now
return prev
def find(self,sour,res,i):
while sour[i]!=res:
i+=1
j=i
while j<len(sour) and sour[j] == res:
j+=1
return j-i
’