在这里,我们将看到“计数并说”序列。这是一个序列,其几个术语如下-
1
11
21
1211
111221
该字符串将被读取为
1(一)
11(一个1)因此,请阅读前一个1,然后说“一个1”
21(两个1)所以请阅读前面的11,然后说“两个1”
1211(一个2 1 1)所以请阅读前面的21,然后说“一个2 1 1”
111221(一个1一2 2 1)所以请阅读前面的1211,然后说“一个1一2 2 2 1”
假设我们有一个数字n,1 <= n <= 30,那么我们必须生成第n个项。
为了解决这个问题,我们将遵循这种方法-
设置s:=“ 1”
如果n = 1,则返回s
对于我:= 2到n + 1
如果curr为“”,则curr:= s [j],count:= 1并将j加1
否则,如果curr是s [j],则将count和j加1
否则temp:= temp +计数为字符串+ curr,curr =“”,count:= 0
j:= 0,temp:=“”,curr =“”并计数:= 0
当j <s的长度时
temp:= temp +算作字符串+ curr
返回s
让我们看下面的实现以更好地理解-
class Solution(object): def countAndSay(self, n): """ :type n: int :rtype: str """ s = "1" if n == 1: return s for i in range(2,n+1): j = 0 temp = "" curr = "" count = 0 while j<len(s): #print(curr,count) if curr =="": #print(curr) curr=s[j] count=1 j+=1 elif curr == s[j]: #print(curr) count+=1 j+=1 else: #print(count,curr) temp+= str(count) + curr curr="" count = 0 #print(temp) temp+=str(count) + curr s=temp return s ob1 = Solution()print(ob1.countAndSay(6))
print(ob1.countAndSay(6))
输出结果
312211