题目:
思路:
题目看起来很绕,实际上就是利用这个函数来数数,比如说n=3的时候,数n=2的时候一共有几个数,n=2的时候字符串为’11’,也就是2个1,所以输出结果为’21’
弄明白题意之后,就按顺序遍历字符串,只考虑n>2时的情况(因为n=1和n=2的时候结果是已知的),如果当前位i和下一位i+1的字符相同,则让字符数+1;如果不同,则对字符串进行拼接;最后一组字符需要单拿出来进行拼接。按照此思路写出的代码如下:
class Solution:
def countAndSay(self, n: int) -> str:
if n == 1:
return '1'
elif n == 2:
return '11'
# 设置初始字符串
rstr = '11'
while n > 2:
# 设置拼接字符串
tstr = ''
r_count = 1
for i in range(len(rstr)-1):
# 字符相同,则字符数+1
if rstr[i] == rstr[i+1]:
r_count = r_count + 1
else:
# 字符不同,则进行拼接
tstr = tstr + str(r_count) + str(rstr[i])
r_count = 1
# 处理最后一组字符的拼接
if i + 1 == len(rstr)-1:
tstr = tstr + str(r_count) + str(rstr[i+1])
rstr = tstr
n = n - 1
return rstr