东寻

导航

跳台阶

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

思路

递归重复子分支和函数栈调用影响效率。
计算前6项观察规律:0:0,1:1,2:2,3:3,4:5,5:8
数列呈斐波那契数列规律。

最终解是由前面的解累积而成:
若楼梯阶级 n = n
跳 2 步到 n:剩下的是第 n - 2 步没跳,起始跳到第 n - 2 步设它为 pre2 种
跳 1 步到 n:剩下的是第 n - 1 步没跳,起始跳到第 n - 1 步设它为 pre1 种
dp(i) = dp(i-2) + dp(i-1)
时间复杂度O(n),空间复杂度O(1)。

递归代码

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

斐波那契循环

public class Solution {
    public int JumpFloor(int target) {
        if(target < 3)    return target;
        int f1 = 1, f2 = 2, tmp = 0;
        for(int i = 2; i < target; i++) {
            tmp = f1 + f2;
            f1 = f2;
            f2 = tmp;
        }
        return f2;
    }
}

posted on 2020-02-16 09:34  东寻  阅读(127)  评论(0编辑  收藏  举报