[LeetCode] 120. Triangle
2017-06-22 22:40
423 查看
【原题】
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).
【解释】
给定一个三角形的数组,数组中的数值代表路径的长度。要求返回从第一行到最后一行的最短路径。
【思路】
这道题一看就知道是DP类问题,由于最后返回的的是一个和,如果我们从第一行开始,我们并不知道最后一行的时候最短路径会经过哪一个元素,但是可以肯定的是肯定会经过第一行的哪一个元素,所以我们从最后一行开始求,最后返回dp数组的第一个元素即可。假设dp保存的是已经求好的最短路径,当前行的第i个元素(值为n)的最短路径为dp[i]=min(dp[i],dp[i+1])+n。
代码如下:
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).
【解释】
给定一个三角形的数组,数组中的数值代表路径的长度。要求返回从第一行到最后一行的最短路径。
【思路】
这道题一看就知道是DP类问题,由于最后返回的的是一个和,如果我们从第一行开始,我们并不知道最后一行的时候最短路径会经过哪一个元素,但是可以肯定的是肯定会经过第一行的哪一个元素,所以我们从最后一行开始求,最后返回dp数组的第一个元素即可。假设dp保存的是已经求好的最短路径,当前行的第i个元素(值为n)的最短路径为dp[i]=min(dp[i],dp[i+1])+n。
代码如下:
public class Solution { public int minimumTotal(List<List<Integer>> triangle) { int m=triangle.size(); //int n=triangle[0].length;//刚开始还想申请二维数组来着 int[] dp=new int[m+1]; for(int i=m-1;i>=0;i--){ List<Integer> row=triangle.get(i); for(int j=0;j<row.size();j++){ dp[j]=Math.min(dp[j+1],dp[j])+row.get(j);//递推公式 } } return dp[0]; } }
相关文章推荐
- Leetcode-120. Triangle
- LeetCode 120. Triangle 动态规划
- Leetcode 120. Triangle
- LeetCode-120. Triangle
- leetcode 120. Triangle
- leetcode @python 120. Triangle
- LeetCode 120. Triangle
- LeetCode 120. Triangle
- LeetCode - 120. Triangle - 思路详解 - C++
- LeetCode 120. Triangle 题解
- [LeetCode]120. Triangle
- LeetCode 120. Triangle
- LeetCode 120. Triangle (三角形)
- LeetCode 120. Triangle
- leetcode 120. Triangle
- Leetcode-120. Triangle
- LeetCode 120. Triangle 动态规划
- Leetcode 120. Triangle
- Leetcode题解 120. Triangle
- Leetcode 120. Triangle