【剑指Offer学习】【面试题10 :青蛙跳台的变种问题】

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

题目分析

这次的场景和之前青蛙跳台的问题不一样,前一次的场景是青蛙一次可以调1个台阶,也可以跳2个台阶。现在的场景是:青蛙也可以跳上n级。所以情况又发生了变化。

现在我们用数学归纳法来分析一下这个变种问题:

首先,当n=1时,只有一种跳法  f(1)=1。

其次,当n=2时,有两种跳法,每次跳1阶,或者一次性跳2阶。f(2) =2。

当n=3时,有4种跳法,第一种方式是第一次跳1阶,剩下的2个台阶有f(2)次跳法,f(2)=2,第二种方式是第一次跳2阶,剩下的1个台阶有f(1)=1种跳法,第三种方式是一次性跳3阶,f(0)=1。所以当n=3时,有f(2)+f(1)+f(0)=4。

当分析到n=3时,我们发现这种场景下,可以归纳到n>3时,f(n)=f(n-1)+f(n-2)+f(n-3)+f(...)+f(0)。而f(n-1)=f(n-2)+f(n-3)+f(n-4)+f(n-5)+f(..)+f(0)。两式相减,得到f(n)-f(n-1)=f(n-1),整理可以得到f(n)=f(n-1)*2。

分析到这,我们接下来写代码就容易得多了。

public static int JumpFloorII(int n){
        if(n==1 || n==2){
            return n;
        }else{
            return JumpFloorII(n-1)*2;
        }
    }

猜你喜欢

转载自blog.csdn.net/kuangsonghan/article/details/81434029
今日推荐