题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路
《跳台阶》那题是一次只能跳1级或2级,这题是一次可以跳任意级。
思路和前一题一样
d
p
[
n
]
dp[n]
dp[n]表示跳到
n
n
n级的方案数
d
p
[
n
]
=
d
p
[
n
−
1
]
+
d
p
[
n
−
2
]
+
.
.
.
.
.
+
d
p
[
1
]
+
1
dp[n] = dp[n-1]+dp[n-2]+.....+dp[1]+1
dp[n]=dp[n−1]+dp[n−2]+.....+dp[1]+1 (最后的加一是直接跳到n级)
public class Solution {
public int JumpFloorII(int target) {
int[] dp = new int[55];
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= target; i++){
for(int j = 1; j < i; j++){
dp[i] += dp[j];
}
dp[i]+=1;
}
return dp[target];
}
}
时间复杂度可以优化到 O ( n ) O(n) O(n)
public class Solution {
public int JumpFloorII(int target) {
int[] dp = new int[55];
dp[1] = 1;
dp[2] = 2;
int sum = 3;
for(int i = 3; i <= target; i++){
dp[i] = sum+1;
sum += dp[i];
}
return dp[target];
}
}