题目
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1
11
21
1211
11221
分类讨论
写的很笨,却意外的击败了99%
思路如下:
外面的for循环控制次数,里面的for循环用来遍历上次的结果,pre和res分别存这次和上次的结果,curr存的是目前讨论的值,具体讨论如下:
- 当n=1或n=0需要独立讨论
- 当遍历pre时,我们只需要考虑现在是否和curr中存的值是否相等,相等加一,若不等,我们将结果链接到res后面,并且赋curr为现在的值,并将count置1(注意是置1不是置0,因为你下次遇到它的时候是第二个而不是第一个!)
- 当遍历完pre后,会有两种情况:
- 其一,最后几位都相等,所以并没有进入else,自然没有被加入到res里
- 其二,最后一位不等,那自然也没有进入else(没有机会),那我们也需要将它手动加入进去(注意,因为else里count是置1所以我们并不用做其他的处理,所以实际上这两种情况都做相同的操作)
def countAndSay(self, n: int) -> str:
pre = "1"
if n==1 or not n: return "1"
for _ in range(2,n+1):
count = 0
curr = pre[0]
res = ""
for j in pre:
if curr == j:
count+=1
else:
res+=str(count) + str(curr)
curr = j
count = 1
res+=str(count) + str(curr)
pre = res
return res