题目描述
解题思路
初始化字符串 init 为 “1”,作为外观数列的第一项。
通过循环迭代生成外观数列的下一项,循环次数为 n-1,因为已经初始化了第一项。
在每次迭代中,通过两个指针 pos 和 start 来遍历当前项 init,pos 指向当前字符,start 指向当前连续字符序列的起始位置。
在内层的两个 while 循环中,pos 从 start 开始向后移动,直到遇到不同的字符或者到达字符串末尾。
每次遇到不同的字符时,将当前连续字符序列的长度(pos - start)和该字符本身(init[start])拼接到 curr 字符串中。
更新 start 为当前 pos 的值,以便下一次计算下一个连续字符序列的长度。
将生成的新字符串 curr 赋值给 init,继续下一轮迭代。
最终返回生成的外观数列第 n 项的字符串表示。
解题代码
class Solution:
def countAndSay(self, n: int) -> str:
init=“1”
for i in range(n-1):
curr=“”
pos=0
start=0
while pos<len(init):
while pos<len(init) and init[pos]==init[start]:
pos+=1
curr+=str(pos-start)+init[start]
start=pos
init=curr
return init