q120
Idea State dp[i][j]: how much value of shortest path to get position i, j State transfer function: dp[i][j] = min(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j] marginal conditions: first column and last column.
deep copy of list: List<List> newTriangle = new ArrayList<>(triangle);
Code
import java.util.Collections;
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
// state: dp[i][j]: how much value of shortest path to get position i, j
List<List<Integer>> newTriangle = new ArrayList<>(triangle);
Integer element = triangle.get(0).get(0);
Integer sum;
int col_length = 1;
newTriangle.get(0).set(0, element);
for (int i = 1; i < triangle.size(); i++){
col_length = triangle.get(i).size();
sum = triangle.get(i).get(0) + triangle.get(i-1).get(0);
newTriangle.get(i).set(0, sum);
sum = triangle.get(i).get(col_length-1) + triangle.get(i-1).get(col_length-2);
newTriangle.get(i).set(col_length-1, sum);
for (int j = 1; j < col_length-1; j++){
sum = Math.min(triangle.get(i-1).get(j-1), triangle.get(i-1).get(j)) + triangle.get(i).get(j);
newTriangle.get(i).set(j,sum);
}
}
int min_value = Integer.MAX_VALUE;
int row_length = triangle.size();
for (int j = 0; j < col_length; j++){
if (newTriangle.get(row_length-1).get(j) < min_value){
min_value = newTriangle.get(row_length-1).get(j);
}
}
return min_value;
}
}