剑指Offer_08_跳台阶

来源:互联网 发布:淘宝运营做什么的 编辑:程序博客网 时间:2024/06/05 04:15

题目描述

一只青蛙一次可以跳上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 == 0return 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] >= 0return dp[n];        else{            return dp[n] = fibonacci(n - 1, dp) + fibonacci(n - 2, dp);        }    }}
0 0
原创粉丝点击