(剑指offer)变态跳台阶

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccnuacmhdu/article/details/84679211

时间限制:1秒 空间限制:32768K 热度指数:248187

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

代码一(递归):

public class Solution {
    public int JumpFloorII(int target){
        if(target == 0){
            return 1;
        }else{
            int n = target;
            int sum = 0;
            for(int i = 1; i <= n; i++){
                if(n-i>=0){//注意这里是>=0
                    sum += JumpFloorII(n-i);
                }else{
                    break;
                }
            }
            return sum;
        }
    }
}

代码二(推公式);
仍然是逆向考虑,最后一次跳级必然是1、2、3……n级,那么f(n)=1+f(n-1)+f(n-2)+……+f(1),那么把n换成n+1,有f(n+1)=1+f(n)+f(n-1)+……+f(1),两式相减得到f(n+1)-f(n)=f(n),即f(n+1)=2*f(n),由于f(1)=1,那么f(n)=2^(n-1)

public class Solution {
    public int JumpFloorII(int target) {
        if(target == 1){
            return 1;
        }else{
            return 2*JumpFloorII(target-1);
        }
    }
}

public class Solution {
    public int JumpFloorII(int target){
        return 1<<(--target);
    }
}

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/84679211