1、暴力
思路:使用两个list,一个用来存表述。
class Solution:
def countAndSay(self, n: int) -> str:
array=list()
array.append(1)
for j in range(n-1):# 外循环
i = 0
size = len(array)
newarray=list()
while i < size: # 新一列开始循环
count=1
while i<size-1 and array[i]==array[i+1]: # 数字相同计数
count += 1
i += 1
newarray.append(count)
newarray.append(array[i])
i += 1
array = newarray
return ''.join(str(num) for num in array)
2、递归 倒推
class Solution:
def countAndSay(self, n: int) -> str:
if n==1:
return "1"
pre = self.countAndSay(n-1)+"*" # *为了使循环不漏掉最后一个字符
size = len(pre)
count = 1
result = ''
for i in range(1,size):
if i<size and pre[i] == pre[i-1]: # 如果与上一个字符相同
count += 1
else:
result += str(count)
result += pre[i-1]
count = 1
return result