动态规划-爬楼梯.js

  1. // 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
  2. // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
  3. // 注意:给定 n 是一个正整数。
  4. // 示例 1:
  5. // 输入: 2
  6. // 输出: 2
  7. // 解释: 有两种方法可以爬到楼顶。
  8. // 1. 1 阶 + 1 阶
  9. // 2. 2 阶
  10. // 示例 2:
  11. // 输入: 3
  12. // 输出: 3
  13. // 解释: 有三种方法可以爬到楼顶。
  14. // 1. 1 阶 + 1 阶 + 1 阶
  15. // 2. 1 阶 + 2 阶
  16. // 3. 2 阶 + 1 阶
  17. /**
  18. * @param {number} n
  19. * @return {number}
  20. */
  21. let cache = { 1: 1, 2: 2, 3: 3 };
  22. var climbStairs = function (n) {
  23. if(cache[n]) {
  24. return cache[n]
  25. }
  26. var res = climbStairs(n - 1) + climbStairs(n - 2)
  27. cache[n] = res
  28. return res
  29. };

动态规划-泰波那契序列.js

  1. // 泰波那契序列 Tn 定义如下:
  2. // T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
  3. // Tn = T(n-3) + T(n-2) + T(n-1)
  4. // 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
  5. // 示例 1:
  6. // 输入:n = 4
  7. // 输出:4
  8. // 解释:
  9. // T_3 = 0 + 1 + 1 = 2
  10. // T_4 = 1 + 1 + 2 = 4
  11. // 示例 2:
  12. // 输入:n = 25
  13. // 输出:1389537
  14. // 纯递归解法会超时
  15. let cache = {0:0, 1:1, 2:1}
  16. var tribonacci = function (n) {
  17. if (n == 0) {
  18. return 0;
  19. }
  20. if(cache[n]) {
  21. return cache[n]
  22. } else {
  23. let res = tribonacci(n - 1) + tribonacci(n-2) + tribonacci(n - 3)
  24. cache[n] = res
  25. return res
  26. }
  27. };
  28. tribonacci(n)