剑指Offer_08_跳台阶

题目描述

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

解题思路

这是一个动态规划的题。对于n个台阶,可以是n-1个台阶跳一步得到,也可以是n-2步台阶跳两步得到。因此有递归式 f(n) = f(n-1) + f(n-2);
因此可以使用两种方式递归和循环来实现。

实现

  1. 循环
public class Solution {
    public int JumpFloor(int target) {
		if(target==1) return 1;
        if(target==2) return 2;
        int fn_1 = 2, fn_2 = 1;
   		int fn = 0;
        for(int i = 3; i <= target; i++){
            fn = fn_1 + fn_2;
            fn_2 = fn_1;
            fn_1 = fn;
        }
        return fn;
    }
}

2. 递归

public class Solution {
    public int JumpFloor(int target) {
        if (target == 0) return 0;
        int[] dp = new int[target + 1];
        for (int i = 0 ; i < target + 1; i ++){
            dp[i] = -1;
        }

        dp[0] = 1;
        dp[1] = 1;

        return jumpFloor(target, dp);
    }

    private int jumpFloor(int n, int[] dp) {
        if (dp[n] >= 0) return dp[n];
        else{
            return dp[n] = fibonacci(n - 1, dp) + fibonacci(n - 2, dp);
        }
    }
}
posted @ 2016-08-12 09:42  峰扬迪  阅读(113)  评论(0编辑  收藏  举报