JS算法之动态规划

150 阅读1分钟

动态规划(dynamic programming, DP)是一种将复杂问题分解成更小的子问题来解决的优化技术。

用动态规划解决问题时,有三个步骤:

1)定义子问题;

2)实现要反复执行来解决子问题的部分

3)识别并求解出基线条件

能用动态规划解决的一些著名问题,如:背包问题,最长公共子序列,硬币找零等

leetcode 70爬楼梯举例:

假设你正在爬楼梯。需要n阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

**注意:**给定n是一个正整数。

爬到第n阶可以从第n - 1阶爬1个台阶,或者在第n - 2阶爬2个台阶

1)定义子问题  F(n) = F(n - 1) + F(n - 2)

  1. 反复执行子问题,从 2 循环到n ,执行上面的子问题(公式)

3)找到返回条件,临界条件

var climbStairs = function(n){
   if(n < 2){ return 1; }
   const dp = [1, 1];
   for(let i = 2; i <= n; i +=1){
     dp[i] = dp[i - 1] + dp[i - 2]
   }
   return dp[n]
}

参考:Javascript数据结构和算法、慕课网