Leecode中的字符串报数问题与递归算法结合

一直以来,对于递归算法,我们都很推崇,但是又很讨厌。在不做处理的情况下,递归算法低效率,高内存;而且,递归层有限制,会给我们程序带来很大的bug。推崇,因为他将冗长的代码变得简单明了。而且,生活中往往很多问题,都可以递归。由一小部分的关系,渐渐的往上推理,找到其中的规律。但是,知道是一回事,怎么应用又是另外的一回事,下面,就我遇到的一个问题来谈谈递归
问题如下:
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

  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 项。
注意:整数顺序将表示为一个字符串。
初见时,我没有太多的想法,就是简简单单的根据提示,将字符串拆分:先找到第一个数,确定下来后,看看第二个数是否一样,直到找到不一样的为止,然后,将其出现次数用len求出,加上其本身,之后再对后面做同样的操作,简单来说就是递归。大致的函数如下:
def readnum(s):
a=s[0]
if len(set(s))1:
return (str(len(s))+str(s[0]))
if len(set(s))>1:
i=0
while i < len(s):
if a
s[i]:
i=i+1
continue
if a!=s[i]:
return str(len(s[0:i]))+a+readnum(s[i::])
之后,我们大致可以通过一个循环求出我们希望得到的结果。
通过此题,我不是说这个解法有多好,只是想简单说明一下遇到问题时的一个思考方式和递归联系起来;当然,此题也有缺陷,递归层次会有超范围的情况,还望有大神指导一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值