算法练习(二):爬楼梯

227 阅读1分钟
  • 递归法
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)