青蛙跳台阶
题目:一直青蛙,一次可以跳1个台阶,也可以跳2个台阶,问该青蛙跳上n级台阶,总共需要多少种方式
分析:
- f(1) = 1 跳 1级台阶只有一种方式
- f(2) = 2 跳 2级台阶,有两种方式
- f(n) = f(n-1) + f(n-2) 跳n级,可拆分成两个问题
- 第一次跳,要么跳1级,要么跳2级
- 第一次跳1级,剩下f(n-1) 种方式
- 第一次跳2级,剩下 f(n-2) 种方式
- 看公式,和斐波那契数列一样。
- 这是典型的动态规划问题:即把一个大问题,拆分成不同的小问题,递归乡下
- 类似这种问题,我们一般使用动态规划的思路(递归)分析问题,再转化为循环来解决问题
代码实现(循环方式实现):
斐波那契数列的时候我们知道,不能用递归方式实现,所以我们采用循环的方式
/** * @description 青蛙跳台阶问题 */ /** * * @param n * @returns */ export function jumpFloors(n: number): number{ if(n <= 1) return 1 // 如果台阶小于等于1返回1 let a = 1 // 记录 跳n-2 台阶的方法数量 let b = 1 // 记录 跳 n-1 台阶的方法数量 let res = 1 for(let i = 2; i <= n; i++){ res = a + b; a = b; b = res } return res }
测试用例:
/** * @description 青蛙跳台阶问题 测试 */ import {jumpFloors} from './jumpFloors' describe('青蛙跳台阶问题 测试',()=>{ it('小于等于1个台阶的情况',()=>{ expect(jumpFloors(-1)).toBe(1) expect(jumpFloors(0)).toBe(1) expect(jumpFloors(1)).toBe(1) }) it('正常情况',()=>{ expect(jumpFloors(3)).toBe(3) expect(jumpFloors(4)).toBe(5) expect(jumpFloors(5)).toBe(8) }) })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2023-02-26 js相关面试题总结