leetcode 120. 三角形最小路徑和 中等 動態規劃

題目:
在這裏插入圖片描述
分析:注意理解題目的一點是每一步只能移動到下一行中相鄰的結點上,這句話意思是隻能向下移動或右下移動,而不能向左下移動
很顯然使用動態規劃的思想,我這裏使用的是最簡單想到的自頂向下,用一個二維數組記錄狀態,記錄每一個位置(走到當前位置)的最小路徑和,那麼最優解出現在二維數組的最後一行中
動態規劃的做法:遍歷每一行,對於每一行而言,每個位置的來源來自正上方或左上方
有兩個特殊的點要注意,每一行的最左的一個沒有左上方,每一行的最右的一個沒有正上方

代碼:

class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        if(triangle == null || triangle.size() == 0){
            return 0;
        }
        int row = triangle.size();
        int[][] dp = new int[row][triangle.get(row-1).size()];
        dp[0][0] = triangle.get(0).get(0);
        for(int i = 1; i < row; i++){
            //每一行的個數是行下標+1,所以j<=i
            for(int j = 0; j <= i; j++){
                if(j == 0){
                    dp[i][j] = dp[i-1][j] + triangle.get(i).get(j);
                }else if(j == i){
                    dp[i][j] = dp[i-1][j-1] + triangle.get(i).get(j);
                }else{
                    dp[i][j] = Math.min(dp[i-1][j], dp[i-1][j-1]) + triangle.get(i).get(j);
                }
            }
        }
        int min = Integer.MAX_VALUE;
        for(int a : dp[row-1]){
            min = Math.min(min, a);
        }
        return min;
    }
}

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章