120.三角形最小路径和
题目描述
题解
从上往下取,我们可以看出来第一个数字和最后一个数字其实都是固定的.
java
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int ans = Integer.MAX_VALUE;
int n = triangle.size();
for (int i = 1; i < n; i++) {
for (int j = 0; j < triangle.get(i).size(); j++) {
if (j == 0) {
triangle.get(i).set(j, triangle.get(i).get(j) + triangle.get(i - 1).get(j));
} else if (j == i) {
triangle.get(i).set(j, triangle.get(i).get(j) + triangle.get(i - 1).get(j - 1));
}else{
triangle.get(i).set(j,triangle.get(i).get(j)+Math.min(triangle.get(i-1).get(j),triangle.get(i-1).get(j-1)));
}
}
}
for (Integer integer : triangle.get(n - 1)) {
if (integer<ans){
ans = integer;
}
}
return ans;
}
}
go
func minimumTotal(triangle [][]int) int {
n := len(triangle)
// 初始化一个二维数组 n*n其中元素都为0
// [[],[],[]...n]
f := make([][]int, n)
const WIDTH int = 10
for i := 0; i < n; i++ {
// [0,0,0...n]
f[i] = make([]int, n)
}
f[0][0] = triangle[0][0]
for i := 1; i < n; i++ {
// 第一个元素不需要跟其他元素比大小
f[i][0] = f[i-1][0] + triangle[i][0]
for j := 1; j < i; j++ {
f[i][j] = min(f[i-1][j-1], f[i-1][j]) + triangle[i][j]
}
f[i][i] = f[i-1][i-1] + triangle[i][i]
}
ans := math.MaxInt32
for i := 0; i < n; i++ {
ans = min(ans, f[n-1][i])
}
return ans
}
func min(num1 int, num2 int) int {
if num1 > num2 {
return num2
}
return num1
}