试题:
삼각형을 감안할 때, 위에서 아래로 최소 경로 합계를 찾을 수 있습니다. 각 단계는 아래 행에 인접한 번호를 이동할 수 있습니다.
예를 들어, 다음과 같은 삼각형을 주어
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
상단에서부터 하단까지의 최소 경로 합은 11 (즉, 2 + 3 + 5 + 1 = 11).
노트 :
보너스 포인트는 여기서 n은 삼각형의 행의 총 수는 만 O (n)의 추가 공간을 사용하여이 작업을 수행 할 수있는 경우.
代码:
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;
}
}