LeetCode : 120. Triangle三角形最短路径
程序员文章站
2022-04-01 16:53:31
...
试题:
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).
Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
代码:
import java.util.*;
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
if(triangle == null || triangle.size() == 0 || triangle.get(0) == null || triangle.get(0).size() == 0) return 0;
int maxl = triangle.get(triangle.size()-1).size();
int[][] dp = new int[2][maxl];
int flag = 1;
Arrays.fill(dp[0], Integer.MAX_VALUE);
Arrays.fill(dp[1], Integer.MAX_VALUE);
dp[0][0] = triangle.get(0).get(0);
for(int i = 1; i < triangle.size(); i++){
List<Integer> temp = triangle.get(i);
for(int j = 0; j < temp.size(); j++){
if(j == 0){
dp[flag][j] = dp[1-flag][j] + temp.get(j);
}else if(j == temp.size()-1){
dp[flag][j] = dp[1-flag][j-1] + temp.get(j);
}else{
dp[flag][j] = Math.min(dp[1-flag][j], dp[1-flag][j-1]) + temp.get(j);
}
}
flag = 1 - flag;
}
int min = Integer.MAX_VALUE;
for(int num : dp[1 - flag]){
min = Math.min(min, num);
}
return min;
}
}
上一篇: 【dp刷题】三角形最短路径和-120
下一篇: 51nod1298