剑指offer-008-跳台阶

Posted zyrjessie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-008-跳台阶相关的知识,希望对你有一定的参考价值。

题目:

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

 

思路:

发波那契数列变形。

问题的解依赖子问题的解。同样用分治,或者bottom-up动态规划。

如果青蛙在第n级台阶上,那么它上一跳一定是在n-1, 或者n-2层台阶上。

假设f(n) 是跳n级台阶的所用跳法,那么 f(n) = f(n - 1) + f(n - 2)

base case:

f(1) = 1;

f(2) = 2;

 

代码:

1. 递归(不推荐)

public class Solution {
    public int JumpFloor(int target) {
        if(target == 1) {
            return 1;
        }
        
        if (target == 2){
            return 2;
        }
        
        return JumpFloor(target - 1) + JumpFloor(target - 2);
        
    }
}

时间复杂度:O(2^n)

 

2. bottom up (推荐)

public class Solution {
    public int JumpFloor(int target) {
        
        // 确保当target=1时, target[2]不越界,所以+2
        int[] jumpTable = new int[target + 2];
        
        jumpTable[1] = 1;
        jumpTable[2] = 2;
        
        for(int i = 3; i <= target; i++){
            jumpTable[i] = jumpTable[i - 1] + jumpTable[i - 2];
        }
        
        return jumpTable[target];
    }
}

时间复杂度:O(n)

 

以上是关于剑指offer-008-跳台阶的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer跳台阶

剑指Offer 跳台阶

剑指offer:变态跳台阶

剑指offer 变态跳台阶

剑指offer 跳台阶

剑指offer 9.变态跳台阶