python循环报数问题_38. 报数(Python)-【尚未解决】

更多精彩内容,请关注【力扣简单题】。

题目

难度:★★☆☆☆

类型:数组

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1

11

21

1211

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"

解答

网上都只说从前一个推后一个,但是真的很难看懂,直接引CSDN某大佬的吧。

class Solution:

def countAndSay(self, n):

"""

:type n: int

:rtype: str

"""

if n == 1: # 类似于斐波拉契数,后面的数跟前面的数有关

return '1'

if n == 2:

return '11'

# 进行i=3时的循环时,它的上一项为'11'

pre = '11'

# 用for循环不断去计算逼近最后一次

for i in range(3, n + 1):

res = '' # 结果,每次报数都要初始化

cnt = 1 # 计数变量

length = len(pre) # 遍历我们的上一项,所以记录它的长度

for j in range(1, length):

if pre[j - 1] == pre[j]: # 相等则加一

cnt += 1

else:

# 一旦遇到不同的变量,就更新结果

res += str(cnt) + pre[j - 1]

cnt = 1 # 重置为1

# 把最后一项及它的数量加上

res += str(cnt) + pre[j]

pre = res # 保存上一次的结果

return res

如有疑问或建议,欢迎评论区留言~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值