题目
思路
这个题的思路肯定是要迭代n-1次,每次都要用到上一次的结果,所以最明确的方法就是递归,或者for循环嵌套。思路还是双指针。除了两个指针变量外,还需要另外两个变量来存放旧字符串和新字符串。
代码
class Solution(object):
def countAndSay(self, n):
"""
:type n: int
:rtype: str
"""
pre = '' ##初始化一个空字符串
cur = '1' ##初始化一个n为1时的字符串
for _ in range(1, n): ##从n>=2开始使用循环
pre = cur ##初始化旧字符串
cur = '' ##初始化新字符串
start = 0 ##初始化两个指针
end = 0
while end < len(pre): ##使用end遍历旧字符串
while end < len(pre) and pre[start] == pre[end]: ##当start指针和end指针值相同时,后移end指针
end += 1
cur = cur + str(end-start) + pre[start] ##拼接字符串,第一位为相同字符的个数,第二位为相同的字符
start = end ##将start指针移至end指针
return cur
这里cur是个字符串,不能像数组一样根据下标为某一位赋值,所以使用拼接的方法。