509. 斐波那契数
解法:代码随想录
题目:- LeetCode
top down/ memorization
class Solution {
private Map<Integer, Integer> cache = new HashMap<>(Map.of(0, 0, 1, 1));
public int fib(int n) {
if (cache.containsKey(n)) {
return cache.get(n);
}
cache.put(n, fib(n - 1) + fib(n - 2));
return cache.get(n);
}
}
bottom up/ iterative (evolve from turbulation)
class Solution {
public int fib(int n) {
if (n <= 1) return n;
int pre1 = 0;
int pre2 = 1;
int idx = 2;
while (idx++ <= n) {
int tmp = pre2;
pre2 = pre1 + pre2;
pre1 = tmp;
}
return pre2;
}
}
70. 爬楼梯
解法:代码随想录
题目:- LeetCode
bottom up/ turbulation
class Solution {
Map<Integer, Integer> map = new HashMap(Map.of(1,1,2,2));
public int climbStairs(int n) {
if (n <= 2) return n;
int p1 = 1;
int p2 = 2;
int tmp = p2;
for (int i = 3; i <= n; i++) {
tmp = p2;
p2 = p1 + p2;
p1 = tmp;
}
return p2;
}
}
top down/ memorization
class Solution {
Map<Integer, Integer> map = new HashMap(Map.of(1,1,2,2));
public int climbStairs(int n) {
if (n <= 2) return n;
int p1 = 1;
int p2 = 2;
int tmp = p2;
for (int i = 3; i <= n; i++) {
tmp = p2;
p2 = p1 + p2;
p1 = tmp;
}
return p2;
}
}
746. 使用最小花费爬楼梯
解法:代码随想录
题目:- LeetCode
初始两步不花费。
递推公式:
mini[i] = Math.min(mini[i - 2] + cost[i - 2], mini[i - 1] + cost[i - 1]);
class Solution {
public int minCostClimbingStairs(int[] cost) {
int[] mini = new int[cost.length + 1];
for (int i = 2; i <= cost.length; i++) {
mini[i] = Math.min(mini[i - 2] + cost[i - 2], mini[i - 1] + cost[i - 1]);
}
return mini[mini.length - 1];
}
}