[leetcode]120. Triangle(Java)
2017-07-14 13:21
190 查看
https://leetcode.com/problems/triangle/#/description
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).
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.
package go.jacob.day714;
import java.util.List;
public class Demo1 {
/*
* 从下往上遍历,不需要开辟额外的空间
*/
public int minimumTotal(List<List<Integer>> triangle) {
int rows=triangle.size();
for(int i=rows-2;i>=0;i--){
for(int j=0;j<=i;j++){
int min=Math.min(triangle.get(i+1).get(j), triangle.get(i+1).get(j+1));
triangle.get(i).set(j, triangle.get(i).get(j)+min);
}
}
return triangle.get(0).get(0);
}
/*
* Solution by me
* 需要额外空间
*/
public int minimumTotal_1(List<List<Integer>> triangle) {
int rows = triangle.size();
int[][] res = new int[rows][rows];
res[0][0] = triangle.get(0).get(0);
for (int i = 1; i < rows; i++) {
for (int j = 0; j <= i; j++) {
int num = triangle.get(i).get(j);
int min = Math.min(j - 1 >= 0 ? res[i-1][j-1] : res[i-1][j],
j < i ? res[i-1][j] : res[i-1][j-1])
;
res[i][j] = num + min;
}
}
int min = res[rows - 1][0];
for (int i = 1; i < rows; i++)
if (min > res[rows - 1][i])
min = res[rows - 1][i];
return min;
}
}
4000
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.
package go.jacob.day714;
import java.util.List;
public class Demo1 {
/*
* 从下往上遍历,不需要开辟额外的空间
*/
public int minimumTotal(List<List<Integer>> triangle) {
int rows=triangle.size();
for(int i=rows-2;i>=0;i--){
for(int j=0;j<=i;j++){
int min=Math.min(triangle.get(i+1).get(j), triangle.get(i+1).get(j+1));
triangle.get(i).set(j, triangle.get(i).get(j)+min);
}
}
return triangle.get(0).get(0);
}
/*
* Solution by me
* 需要额外空间
*/
public int minimumTotal_1(List<List<Integer>> triangle) {
int rows = triangle.size();
int[][] res = new int[rows][rows];
res[0][0] = triangle.get(0).get(0);
for (int i = 1; i < rows; i++) {
for (int j = 0; j <= i; j++) {
int num = triangle.get(i).get(j);
int min = Math.min(j - 1 >= 0 ? res[i-1][j-1] : res[i-1][j],
j < i ? res[i-1][j] : res[i-1][j-1])
;
res[i][j] = num + min;
}
}
int min = res[rows - 1][0];
for (int i = 1; i < rows; i++)
if (min > res[rows - 1][i])
min = res[rows - 1][i];
return min;
}
}
4000
相关文章推荐
- 【LeetCode】120. Triangle 基于C++和Java的分析及解法,动态规划
- LeetCode-394. Decode String (JAVA)解码字符串
- Single Number leetcode java
- Java for LeetCode 095 Unique Binary Search Trees II
- 【LeetCode-面试算法经典-Java实现】【073-Climbing Stairs(爬楼梯)】
- (Java)LeetCode-51. N-Queens
- leetcode解题之231# Power of Two&326. Power of Three Java版 (判断是否为2,或者3 的幂)
- 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
- Leetcode-Best Time to Buy and Sell Stock -java
- (java)leetcode-22
- [leetcode] Copy List with Random Pointer, Java
- LeetCode|Excel Sheet Column Title-java
- leetCode中java实现归并排序
- [LeetCode] 011. Container With Most Water (Medium) (C++/Java/Python)
- [Java]Leetcode14 Longest Common Prefix
- Java [Leetcode 160]Intersection of Two Linked Lists
- 【leetcode】ZigZag Conversion【java】
- [leetcode]8. String to Integer (atoi)(Java)
- LeetCode: Two Sum (Java)
- LeetCode754(Reach a number) Java 代码.