【剑指offer】变态跳台阶 --Java实现

题目描述

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

输入

3

返回值

4

思路分析

设跳到第n阶的跳法共有f(n)种

假设现在已经跳到了第n阶,那么前一步跳到哪里了呢?

如果前一步跳一步到了第n阶,说明上一步在第n-1阶,已知跳到第n-1阶共有f(n-1)种跳法

如果前一步跳两步到了第n阶,说明上一步在第n-2阶,已知跳到第n-2阶共有f(n-2)种跳法

......

如果前一步跳n步到了第n阶,说明上一步在第0阶,已知跳到第0阶共有f(0)种跳法

所以f(n)=f(n-1)+f(n-2)+...+f(0)

同理f(n-1)=f(n-2)+f(n-3)+..+f(0)

所以f(n)=2f(n-1)

核心代码

public class Solution {
    public int JumpFloorII(int target) {
        if(target==0||target==1) return 1;
        int sum = 0;
        int f1 = 1;
        for(int i=2;i<=target;i++){
            sum=2*f1;
            f1=sum;
        }
        return sum;
    }
}

 

posted @ 2021-02-23 13:08  codesheep!  阅读(32)  评论(0)    收藏  举报