[JavaScript LeetCode]70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例:
输入: 2 |
解法一
本题可以采用动态规划的思想,可以将问题分成多个子问题,爬第 n 阶楼梯的方法数量,等于 2 部分之和:
- 爬上
n-1阶楼梯的方法数量。因为再爬 1 阶就能到第 n 阶 - 爬上
n-2阶楼梯的方法数量。因为再爬 2 阶就能到第 n 阶
所以我们得到公式 dp[n] = dp[n-1] + dp[n-2]。
同时需要初始化 dp[1]=1 和 dp[2]=2。(由于 n 是正整数,故从 dp[1]初始化)
时间复杂度:O(n)。
var climbStairs = function (n) { |
解法二
不使用数组,对空间复杂度进行优化。但使用这种方法时,考虑到 n 为 1 或者 2 的情况,故从 dp[0] 开始初始化。
var climbStairs = function (n) { |