微软面试100题之27题:跳台阶问题

题目1:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法。

 

分析:

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

 

     首先我们考虑最简单的情况。如果只有1级台阶,那显然只有一种跳法。如果有2级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1级;另外一种就是一次跳2级。

现在我们再来讨论一般情况。我们把n级台阶时的跳法看成是n的函数,记为f(n)。

      当 n=1 时有 1 种跳法

            一次跳一阶

      当 n=2 时有 2 种跳法

          一次跳一阶, 1   1  

          一次跳二阶    2

      当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

题目2:一个台阶总共有n级,如果一次可以跳1级,可以跳2级,也可以跳3级。求总共有多少总跳法。

 

 

 

分析:

     

 

首先我们考虑最简单的情况。

 

如果只有1级台阶,那显然只有一种跳法。

 

如果有2级台阶,那就有两种跳的方法了:

      一种是分两次跳,每次跳1级;   1   1    共1种

      另外一种就是一次跳2级。

 

如果有3级台阶,那就有三类跳的方法了:

      第一种方式:

         分三次跳,每次跳1级;

          1 1 1                   共 1 种方法

      第二种方式 分两次跳

           2    1   

           1    2                    共 2 种方法

      第三种方式:一次跳3级

           3                         共 1 种方法

即:

 

   n =1   时       方法数 f(1) = 1

   n =2   时       方法数 f(2) = 2

  

   n =3   时       方法数 f(3) = 4

现在我们再来讨论一般情况。我们把n级台阶时的跳法看成是n的函数,记为f(n)。

起步时(仍然)只有三类 :

第一次只跳1级:

     此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);

第一次只跳2级:  

      此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。

第一次跳3级:  

      此时跳法数目等于后面剩下的n-3级台阶的跳法数目,即为f(n-3)。

       因此n级台阶时的不同跳法的总数f(n)=f(n-1)+ f(n-2)+f(n-3)。

 

          /   1                                       n=1 
  f(n) =  2                                       n=2 

          \   4                                       n=3
               f(n-1)+(f-2)+(f-3)        n>3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值