<LeetCode天梯>Day037 爬楼梯(递归+动态规划) | 初级算法 | Python
每日推荐一首歌:千里之外——Jay Chou
以下为我的天梯积分规则:
每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)
初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息)
坚持!!!
初级算法
刷题目录
动态规划
题干
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
递归
分析:
有大佬说这道题和青蛙跳台的原理一样。
- 当n=1时,只一次即可,f(1)=1;
- 当n=2时,可以有两次,f(2)=2;
- 当n=3时,有三次,f(3)=f(2)+f(1);
借用下图片:
class Solution:
def climbStairs(self, n: int) -> int:
# 递归
if n <= 1:
return 1
if n < 3:
return n
return Solution.climbStairs(self, n-1) + Solution.climbStairs(self, n-2)
直接超时,这样递归,有点慢啊!
这儿还是不用递归了,改用非递归吧。
非递归
其实也是用的那个Fibonacci的方法。
class Solution:
def climbStairs(self, n: int) -> int:
if n <=2:
return n
l = [1, 2]
for i in range(n-2):
l.append(l[i]+l[i+1])
return l[n-1]
速率明显上来了。
其实还有好多种方法,大家可以试一试。
继续看论文o(╥﹏╥)o
Reference
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnumcr/
来源:力扣(LeetCode)
作者:数据结构和算法
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn854d/?discussion=DW6hWu
来源:力扣(LeetCode)
今日得分:+10+10
总得分:760加油!!!
- 点赞
- 收藏
- 关注作者
评论(0)