题目来源:https://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387?tpId=13&&tqId=11162&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题解
解题思路:
F(0)=0
F(1)=1
F(2)=F(1)+1=2
F(3)=F(2)+F(1)+1=4,跳到3的方法有:从2跳到3,从1跳到3,从0跳到3
F(4)=F(3)+F(2)+F(1)+1=8= 2 4 − 1 2^{4-1} 24−1
F(n)=F(n-1)+F(n-2)+…+F(1)+1= 2 n − 1 2^{n-1} 2n−1
思路1: F(n)= 2 n − 1 2^{n-1} 2n−1 ,(n>0)
思路2:可以令F(0)=1,则F(n)=F(n-1)+F(n-2)+…+F(1)+F(0)
代码实现
/**
* 方法1:规律 F(n)= 2^{n-1}
*/
public class Solution {
public int JumpFloorII(int target) {
if (target <= 0) {
return 0;
}
return (int) Math.pow(2, target - 1);
}
}
/**
* 方法2:自底向上,动态规划
* 规律 F(n)=F(n-1)+F(n-2)+...+F(1)+F(0)
*/
public class Solution {
public int JumpFloorII(int target) {
if (target <= 0) {
return 0;
}
int[] dp = new int[target + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= target; i++) {
dp[i] = 0;
for (int j = 0; j < i; j++) {
dp[i] += dp[j];
}
}
return dp[target];
}
}