LeetCode(70)爬楼梯
今天是小呆刷题的第11天,今天的题目是:力扣(LeetCode)的第70题,爬楼梯
题目要求
假设你正在爬楼梯。需要
n
阶你才能到达楼顶。每次你可以爬
1
或2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例:
1 |
|
提示:
0 <= n <= 45
解题思路
第一眼看上去,这道题小呆并没有看出什么名堂,所以我们根据示例,写一下输入和输出,看看能否找出规律:
n = 1
输出1
,有1
种方法:1
n = 2
输出2
,有2
种方法:1 + 1, 2
n = 3
输出3
,有3
种方法:1 + 1 + 1, 1 + 2, 2 + 1
n = 4
输出5
,有5
种方法:1 + 1 + 1 + 1, 1 + 1 + 2, 1 + 2 + 1, 2 + 1 + 1, 2 + 2
观察输出,嘿,这不是跟昨天做的斐波那契数一样嘛。那就当做个复习吧~ 先写递归:
1 |
|
再写动态规划。为了方便第一次看小呆博客的同学,还是放一张动态帮助理解,忽略动图里的0,因为本题1 <= n <= 45
,所以0个台阶在本题没有意义:
1 |
|
注意这里跟第509题还是有一丢丢的细微区别,因为本题不存在0
个台阶,所以dp[0],dp[1]
的值是1,2
。其次for
循环的初始值是3
,注意不要粗心哟。就这样今天的算法还没开始就结束了,小呆有点不甘心,所以上述代码有没有可以优化的项呢?答案是有的。
我们用dp
数组维护了一个从1-n
的数据,但其实我们每次计算只需要2个数n - 1, n - 2
,那能不能不用数组,只维护2个变量数据就可以了呢,每次循环的时候,我们去更新它。
1 |
|
小结
算法不只有一种解法,即使已经做出来的解法,也许还有优化的空间。很多同学在刷算法题的时候,太执着于一题多解,这在前期其实会浪费很多时间。初期刷算法题,小呆自己的思路是不纠结学会多种解法,先掌握一种,然后尽量先挑简单的题型,多做。去分析和归类,等大部分题都刷过一遍之后,会的那种解法已经孰能生巧,举一反三之后,再去看更多的解法。加油吧~
引用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小呆&小萌的情侣博客!
评论