计算有多少种方法爬楼梯

题目-爬楼梯

假设你正在爬楼梯,需要 n 步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

示例

比如 n=3,1+1+1=1+2=2+1=3,共有 3 种不同的方法   返回 3

分析

规则可以采用不完全归纳法看看:

0 =0 0种方法
1 = 1 种方法
2 = 1+1 =2 2种方法
3 = 1+1+1=1+2=2+1 3种方法
4 = 1*4 = 1+2+1 = 1+1+2 = 2+1+1 = 2+2 5种方法
5 = 1*5 = 2+1+2 =2+2+1 = 1+2+2 =1+2+1+1 = 1+1+2+1 = 2+1+1+1 = 1+1+1+2 8种方法

简单的想法就是递归, 爬到第n层的组合数等于第n-1层和第n-2层的组合数之和

Just Try

请你自动动手试一下:在线编程环境

想想有没有其他思路?

想想时间和空间复杂度,能否优化一下

真的做不到么?

let you think, think makes you happy!

参考答案

function climbStairs(n){
  if(n == 0) return 0;
  if(n == 1) return 1;
  if(n == 2) return 2;
  return climbStairs(n-1) + climbStairs(n-2)
}

代码复制到在线编程环境试一下:在线编程环境

性能问题

上面代码有性能问题,你把输入改成 100 试试。 ~会卡死一会,经我测试,入参45,可以勉强算出来。~_~

另外一种方法就是正向计算,参考:查找斐波纳契数列中第 N 个数

交换变量

看网上有一种交换变量的写法,其实和正向计算是一样的,只不过空间复杂度降到个位,之前用数据来正向计算空间复杂度是n

function algorithm(n){
    if(n==0) return 0;
    if(n==1) return 1;
    if(n==2) return 2;
    let [a,b]=[1,2];
    for(let i=3; i<= n; i++){
      [a,b] = [b, a + b]
    }
    return b
  }


请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部