面试题之走楼梯问题

题目:

一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度。

注:
这道题最近经常出现,包括Microsoft 等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。

 

思路一:

首先我们考虑最简单的情况:如果只有1 级台阶,那显然只有一种跳法,如果有2 级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1 级;另外一种就是一次跳2 级。
现在我们再来讨论一般情况:我们把n 级台阶时的跳法看成是n 的函数,记为f(n)。当n>2 时,第一次跳的时候就有两种不同的选择:一是第一次只跳1 级,此时跳法数目等于后面剩下的n-1 级台阶的跳法数目,即为f(n-1);另外一种选择是第一次跳2 级,此时跳法数目等于后面剩下的n-2 级台阶的跳法数目,即为f(n-2)。
因此n 级台阶时的不同跳法的总数f(n) = f(n-1) + f(n-2)。
我们把上面的分析用一个公式总结如下:
       /  1  (n=1)
f(n) =  2  (n=2)
       \  f(n-1) + (f-2)  (n>2)
分析到这里,相信很多人都能看出这就是我们熟悉的Fibonacci 序列。(O(n)

///非递归方法  
int Fibonacci1(unsigned int N)  
{  
    if(N<=2)  
        return N;  
    int fibtwo=2;  
    int fibone=1;  
    int fibN=0;  
    for(unsigned int i=3;i<=N;i++)  
    {  
        fibN=fibone+fibtwo;  
        fibone=fibtwo;  
        fibtwo=fibN;  
    }  
    return fibN;  
} 





拓展:  如果能走3个台阶呢?又该如何做?


摘自:微信公众号:燕哥带你学算法(Jeemy110)

原文链接:https://mp.weixin.qq.com/s?__biz=MzUyMjE2MTE0Mw==&mid=2247483717&idx=2&sn=e586a7750c7cc4c387e61837037945ae&chksm=f9d15fddcea6d6cb0e1a2d4a12a5ced58e58a11b408572b949bd267eef314a5f3ff86b8d87ab&mpshare=1&scene=23&srcid=07307NGTzN4y2SCdXA9HEFq9#rd




拓展:   如果能走3个台阶呢?又该如何做?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值