class Solution:
def countAndSay(self, n: int) -> str:
#第一个为"1"
prev ="1"
#第一个prev已经得到,所以我们只需再循环n-1次即可,而不是range(n)
for i in range(n-1):
curr = ''
pos = 0
start = 0
#len(prev)为上一个字符串
while pos < len(prev):
#pos从上一个字符串的0开始遍历
while pos < len(prev) and prev[pos] == prev[start]:
#当读取到相同的时,pos后移一位
#此时start的位置为相同的第一个元素
pos += 1
#当不再相同时,此时pos要指向不相同的第一个元素
#此时,读取结果(两位数字)
curr += str(pos-start) + prev[start]
#此时要更新start,继续进入判断是否相同的循环
start = pos
#外层while循环遍历完时,上一个prev已经遍历完成
#此时更新prev,进入下一次for循环
prev = curr
return prev
"""
使用start和pos来寻找相同的元素,以两者之差当作,相同元素的个数
"""
Leetcode38. 外观数列
最新推荐文章于 2024-09-27 10:11:28 发布