首页 > 代码库 > 【微软100题】一个台阶总共同拥有n 级,假设一次能够跳1 级,也能够跳2 级,求总共同拥有多少总跳法,并分析算法的时间复杂度

【微软100题】一个台阶总共同拥有n 级,假设一次能够跳1 级,也能够跳2 级,求总共同拥有多少总跳法,并分析算法的时间复杂度

package ms100;

/**
 * 一个台阶总共同拥有n 级,假设一次能够跳1 级。也能够跳2 级,求总共同拥有多少总跳法。并分析算法的时间复杂度
 *注:
这道题近期常常出现。包含MicroStrategy 等比較重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。

首先我们考虑最简单的情况: 假设仅仅有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) */ public class MS_27 { private int jumpStep(int n) { if(n<0) return 0; if(n==1||n==2) return n; return jumpStep(n-1) + jumpStep(n-2); } public static void main(String[] args) { MS_27 ms27 = new MS_27(); System.out.println(ms27.jumpStep(2)); } }


【微软100题】一个台阶总共同拥有n 级,假设一次能够跳1 级,也能够跳2 级,求总共同拥有多少总跳法,并分析算法的时间复杂度