报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1, 1
2, 11
3, 21
4, 1211
5, 111221
1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。注意:整数顺序将表示为一个字符串。
示例 1:输入: 1输出: “1”
示例 2:输入: 4输出: “1211”
执行用时 :84 ms, 在所有 Python3 提交中击败了15.00% 的用户
内存消耗 :13.9 MB, 在所有 Python3 提交中击败了5.00%的用户
首先先理解题,输入的整型数字都是上一个的读作的数,输入整型n,遍历(n-1),输出字符串
6,3个1,2个2,1个1 即312211
7,1个3,1个1,2个2,2个1 即13112221
8,1个1,1个3,2个1,3个2,1个1 即1113213211
…(1<=n<=30)
根据思路一点一点来,输出字符串string1=‘1’,从‘1’开始
class Solution:
def countAndSay(self, n: int) -> str:
#输出字符串string1='1',从‘1’开始
string1 = '1'
#首先先理解题,输入的整型数字都是上一个的读作的数,输入整型n,遍历(n-1),输出字符串
for i in range(n - 1):
#首先将指针指向string1的第一项,赋值给a
a = string1[0]
#count用来计数,每一次循环都是从0开始计数
count = 0
#形成新的字符串string2,在这个循环的末端将string2赋值给string1,最后输出i=n-1时string1的值
string2 = ''
#用b遍历string1的每一项
for b in string1:
#存在两种情况,第一种情况是a和string1[0]相等,count自加一,连续相等几次,count自加一几次
if a == b:
count += 1
#不等时,连续中断, 形成新的字符串string2,相当于count个a,count转换成字符串可直接相加
else:
string2 += str(count) + a
#将指针指向string1的新一项,赋值给a,内循环重新开始
a = b
#count至少为1,所以从1开始,内循环重新开始
count = 1
#当前的整数,遍历上一个字符串完了,形成新的字符串string2,相当于count个a,count转换成字符串可直接相加
string2 += str(count) + a
string1 = string2
#输出字符串string1
return string1
算法题目来自:https://leetcode-cn.com/problems/count-and-say/