一只青蛙一次能够跳上1级台阶,也能够跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(前后次序不一样算不一样的结果)。java
不妨本身先去试一下,牛客oj -> 青蛙跳台阶1spa
感受用动态规划很简单。3d
青蛙到达第 i 阶的方法总数 = 第 i -1 阶方法数 + 第 i -2 阶方法数code
代码实现以下cdn
public class Solution {
public int JumpFloor(int target) {
if ( target == 1) {
return 1;
}
int[] dp = new int[target + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= target; i++) {
dp[i] = dp[i - 1] + dp[i -2];
}
return dp[target];
}
}
复制代码
一只青蛙一次能够跳上1级台阶,也能够跳上2级……它也能够跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。blog
不妨本身先去试一下,牛客oj -> 青蛙跳台阶2 get
用斐波那契的思想来解决it
/* 假设f(n)是n个台阶跳的次数。 1. f(1) = 1 2. f(2) 会有两个跳得方式,一次1阶或者2阶,这回归到了问题f(1),f(2) = f(2-1) + f(2-2) 3. f(3) 会有三种跳得方式,1阶、2阶、3阶,那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3).所以结论是f(3) = f(3-1)+f(3-2)+f(3-3) 4. f(n)时,会有n中跳的方式,1阶、2阶...n阶,得出结论:f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1) == f(n) = 2*f(n-1) */
public class Solution {
public int JumpFloorII(int target) {
if(target==0) {
return 0;
}
if(target==1) {
return 1;
}
return 2 * JumpFloorII(target-1);
}
}
复制代码