题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
递归向动态规划转化的步骤,详解可以看这篇博客
第一种方案:递归
class Solution {
int climbStairs(int n) {
if (n <= 2) {
return n;
} else {
return climbStairs(n - 1) + climbStairs(n - 2);
}
}
}
复杂度分析:
- 时间复杂度:O(2n)。
- 空间复杂度:O(2n)。
第二种方案:备忘录法
class Solution {
private Map<Integer, Integer> map = new HashMap<>();
public static int climbStairs(int [] array) {
if (n <= 2) {
return n;
} else if (map.containsKey(n)) {
return map.get(n);
} else {
int value = climbStairs(n - 1) + climbStairs(n - 2);
map.put(n, value);
return value;
}
}
}
复杂度分析:
- 时间复杂度:O(n)。
- 空间复杂度:O(n)。
第三种方案:动态规划
class Solution {
int climbStairs(int n) {
if (n <= 2) {
return n;
}
// 边界条件
int a = 1;
int b = 2;
int result = 0;
// 最优子结构与最终问题之间的关系
for (int i = 3; i <= n; i++) {
result = a + b;
a = b;
b = result;
}
return result;
}
}
复杂度分析:
- 时间复杂度:O(n)。
- 空间复杂度:O(1)。
网友评论