牛客-动态规划-剑指offer71. 变态跳台阶
变态跳台阶
题目描述
描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
数据范围:1≤n≤20
进阶:空间复杂度 O(1), 时间复杂度 O(1)
示例1
输入:3
返回值:4
示例2
输入:1
返回值:1
解题思路:动态规划 完全背包问题
代码如下,各位小伙伴如果有什么问题可以在评论里提出来,欢迎大家交流。
//方法1 用完全背包的方法来解决
public int jumpFloorII(int target) {
//构建dp数组,直接从dp数组查找
int[] dp = new int[21];
dp[0] = 1;
for (int j = 1; j <= 20; j++) {
for (int i = 1; i <= 20; i++) {
if (j >= i) {
dp[j] += dp[j - i];
}
}
}
return dp[target];
}
//方法2 利用本题的特点
//n从1到20,对应的结果分别是:1,2,4,8,16,32......
public int jumpFloorII(int target) {
int res = 0;
int sum = 1;
int i = 1;
while (i <= target) {
res += sum;
sum = res;
i++;
}
return res;
}