跳至主要內容

跳台阶

微信公众号:储凡2023/3/24大约 3 分钟

跳台阶

题目链接

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

数据范围:1≤n≤40 要求:时间复杂度:O(n) ,空间复杂度:O(1)

刷题思路

总共有n个台阶,假如

  • 第一次跳1阶,即:a1=1,则还剩下n-1可以再第二次选择,那么共n-1个台阶,会有多少种跳法???
  • 第一次跳2阶,即:a1=2,则还剩下n-2可以再第二次选择,那么共n-2个台阶,会有多少种跳法???

问题很容易就演变成G(n)=G(n-1)+ G(n-2)

这不就是斐波那契数列么???? 可以参考:【入门】斐波那契数列

代码实现

/**
 * 【简单】跳台阶  递归,要么跳一阶,要么跳两阶
 * 思路: 对于第number台阶,只能从第number-1或者number-2上跳上来
 * 记作: G(number)=G(number-1)+G(number-2)
 * 即: 从第number-1跳上来的次数+从第number-2上跳上来的次数
 *
 */

/**
 * 递归实现
 */
function jumpFloorOne(number) {
  // 递归,要么跳一阶,要么跳两阶
  return number < 3 ? number : jumpFloorOne(number - 1) + jumpFloorOne(number - 2)
}

/**
 * 非递归调用
 */
function jumpFloorTwo(number) {
  let a = 1
  let b = 2
  let result = 1

  for (let index = 3; index <= number; index++) {
    result = a + b
    a = b
    b = result
  }
  return result
}

console.log(jumpFloorOne(7))
console.log(jumpFloorTwo(7))

一些建议

  • 数学分析、逻辑思维很重要
  • 熟练斐波那契数列

更新日志

2024/7/28 10:06
查看所有更新日志
  • c0f2d-refactor: 升级vuepress相关版本,优化项目结构 (#137)
  • 06596-feat: 算法相关文档新增固定链接,优化导入代码配置
  • 9b9e4-feat: 算法相关文档更新,删除讨论链接 (#88)
  • c374b-feat: 更新一些文档的固定链接 (#87)
  • b0275-feat(markdownlint-cli): 添加markdown文档校验,支持lint脚本自动格式化文档
  • 5f1e1-feat: 导航栏、侧边栏内容修改,新增目录对应的文档
  • 02ab1-style: 文档目录调整,修改mdEnhance配置
  • 2a2f2-feat(docs):update
  • 74e84-docs(algorithm): 新增一些文档
贡献者: Chu Fan,chufan,142vip.cn,mmdapl,chufan443