Skip to content

优化动态规划的空间复杂度

Demo

斐波那契算法

ts
// 常规方法
function fibonacci(n) {
  if (n === 1 || n === 2) {
    return 1;
  }
  const dp = [1, 1];
  for (let i = 2; i < n; i++) {
    dp[i] = dp[i - 1] + dp[i - 2];
  }
  return dp[n - 1];
}
ts
// 优化方案
function fibonacci(n) {
  if (n === 1 || n === 2) {
    return 1;
  }
  let p1 = 1;
  let p2 = 1;
  let r;

  for (let i = 2; i < n; i++) {
    r = p1 + p2
    p1 = p2;
    p2 = r;
  }
  return r;
}

方格有多少路径

ts
// 常规方法
var uniquePaths = function(m, n) {
  const dp = new Array(n).fill(1);
  for (let i = 1; i < m; i ++) {
    for (let j = 1; j < n; j ++) {
      dp[j] += dp[j - 1]
    }
  }

  return dp[n - 1];
}