120.Triangle

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

一、空間複雜度O(n^2)
  一共有n行,那麼所佔空間爲n*(n+1)/2的一維數組,從上往下填表,由於下一個值的得出需要上一個值,所以從上往下填表需要設置兩個臨時變量進行倒換,比較麻煩;且從上往下填表的最終結果需要在最底行中找最小值。

二、空間複雜度O(n)
  填表是一個雙重循環,在內循環中,值的得出依賴於前i個數,i最大爲n,所以我們只需要重複利用O(n)空間就可以完成雙循環。

三、從下往上填表
  不需要設置兩個變量倒換,可以直接覆蓋之前的值;且最後的結果輸出DP[0]即可。

public class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        int row = triangle.size();
        int[] DP = new int[row];
        for(int i = 0; i < row; i++) {
            DP[i] = triangle.get(row-1).get(i);
        }
        for(int i = row - 2; 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];
    }
}
發佈了98 篇原創文章 · 獲贊 41 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章