动归解题的一般思路:
- 将原问题分解成多个子问题。子问题都解决了,原问题就解决了
- 用动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个“状态”。一个“状态”对应于一个或多个子问题,所谓某个“状态”下的“值”,就是这个“状态”所对应的子问题的解
- 确定初始状态
确定状态转移方程
eg:leetcode120. Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
思路:从下往上递推,最后一行除外,每一行的每个点的最小值等于自身加上下面一行对应的左右两个点的最小值,自下往上,最顶部的即是所企业
var minimumTotal = function(triangle) {
var minLen = triangle[triangle.length - 1];for(var i = triangle.length - 2; i >= 0; i--) {for(var j = 0; j <= i; j++) {minLen[j] = Math.min(minLen[j] , minLen[j + 1]) + triangle[i][j]}}return minLen[0]
};