leetcode-120. 三角形最小路径和

原始思路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int n = triangle.size();
// 初始记录的状态的数组
int[][] dp = new int[n+1][n+1];

// 自底向上递推
for (int i = n - 1; i >=0 ; i--) {
//从左到右
for (int j = 0; j <= i; j++) {
// 定义状态转移方程
dp[i][j] = Math.min(dp[i+1][j], dp[i+1][j+1]) + triangle.get(i).get(j);
}
}
return dp[0][0];
}
}

题解思路-状态压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int n = triangle.size();
// 初始记录的状态的数组
int[] dp = new int[n+1];

// 自底向上递推
for (int i = n - 1; i >=0 ; i--) {
//从左到右
for (int j = 0; j <= i; j++) {
// 定义状态转移方程
dp[j] = Math.min(dp[j], dp[j+1]) + triangle.get(i).get(j);
}
}
return dp[0];
}
}