假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
minh=[1,2] #每次只能跳1,2,步 ans=[] def plt(l1,h1,n,ans): if h1==n: #记录成功 ans.append(1) return else: for i in l1: if h1 + i <=n: plt(l1,h1+i,n,ans) else: break plt(minh,0,n,ans) return len(ans)
讯享网
但是再第38个楼梯超时了
第二次的代码:
使用带备忘录的递归算法:
每个值只算一遍
讯享网 beiwl=[0]*(n+1) #备忘录 def plt(n): if beiwl[n]>0:#如果备忘录中有值,直接使用 return beiwl[n] elif n<=2: beiwl[n]=n #这里一开始我写成==,半天结果全是0,注意 return beiwl[n] else: beiwl[n]=plt(n-1)+plt(n-2) #备忘录里没值,则计算 return beiwl[n] return plt(n)
24ms,排名98%

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/37500.html