动态规划-爬楼梯.js
// 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
// 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
// 注意:给定 n 是一个正整数。
// 示例 1:
// 输入: 2
// 输出: 2
// 解释: 有两种方法可以爬到楼顶。
// 1. 1 阶 + 1 阶
// 2. 2 阶
// 示例 2:
// 输入: 3
// 输出: 3
// 解释: 有三种方法可以爬到楼顶。
// 1. 1 阶 + 1 阶 + 1 阶
// 2. 1 阶 + 2 阶
// 3. 2 阶 + 1 阶
/**
* @param {number} n
* @return {number}
*/
let cache = { 1: 1, 2: 2, 3: 3 };
var climbStairs = function (n) {
if(cache[n]) {
return cache[n]
}
var res = climbStairs(n - 1) + climbStairs(n - 2)
cache[n] = res
return res
};
动态规划-泰波那契序列.js
// 泰波那契序列 Tn 定义如下:
// T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
// Tn = T(n-3) + T(n-2) + T(n-1)
// 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
// 示例 1:
// 输入:n = 4
// 输出:4
// 解释:
// T_3 = 0 + 1 + 1 = 2
// T_4 = 1 + 1 + 2 = 4
// 示例 2:
// 输入:n = 25
// 输出:1389537
// 纯递归解法会超时
let cache = {0:0, 1:1, 2:1}
var tribonacci = function (n) {
if (n == 0) {
return 0;
}
if(cache[n]) {
return cache[n]
} else {
let res = tribonacci(n - 1) + tribonacci(n-2) + tribonacci(n - 3)
cache[n] = res
return res
}
};
tribonacci(n)