变态跳台阶

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

解题方法一: 排列组合法
时间复杂度O(n)

n 1 2 3 4 5 ...
reslut 1 2 4 8 16 ...
当台阶数n等于1时,青蛙只有一种到达方法;当台阶数等于2时,青蛙有2种到达方法;当台阶数等于4时,青蛙有8种到达方法...
由规律可知(高中的排列组合):当台阶数n = n时,reslut = 2^(n-1),即有2的n-1次方种方法。

java代码如下:

public class Frog {
    public int JumpFloorII(int target) {
        // a<<n代表a的二进制的所有位向左移一位,相当于a*2^n
        return 1<<(target-1);
    }
};

解题方法二:递归法
由数学推导法可得:
f(1)=1
f(2)=f(2-1)+1
f(3)=f(3-2)+f(3-1)+1
......
f(n-1)=f(1)+f(2)+f(3)+..+f(n-2)+1
f(n)=f(1)+f(2)+f(3)+..+f(n-2)+f(n-1)+1
由f(n)-f(n-1)得:f(n) = 2 * f(n-1)
很明显,f(n)是一个等比数列,由公式 aq^(n-1) 可得f(n) = 2^(n-1)
本例中a(首项)为1,q(公比)为2

public class Frog {
    public int JumpFloorII(int target) {
       if(target <= 0){
           return -1;
       }else if(target == 1){
            return 1;
        }else{
            return 2*JumpFloorII(target-1);
        }
    }
}
posted @ 2020-10-19 15:30  cyreal1997  阅读(65)  评论(0)    收藏  举报