- 递归法
function climbStairs(n) {
if ( n === 0 || n === 1) {
return 1
}
return climbStairs(n -1) + climbStairs(n-2)
}
- 动态规划法
爬到第 xx 级台阶的方案数是爬到第 x - 1 级台阶的方案数和爬到第 x - 2 级台阶的方案数的和。很好理解,因为每次只能爬 1级或 2 级,所以 f(x) 只能从 f(x - 1) 和 f(x - 2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。
function climbStairs(n) {
let p = 0;
let q = 0;
let r = 1;
for (let i = 1; i <= n; i ++) {
p = q;
q = r;
r = p + q;
}
return r
}
上述代码时间复杂度为O(n),空间复杂度为O(1)