[LeetCode] #119 楊輝三角 II
阿新 • • 發佈:2021-08-10
[LeetCode] #119 楊輝三角 II
給定一個非負索引 rowIndex
,返回「楊輝三角」的第 rowIndex
行。
在「楊輝三角」中,每個數是它左上方和右上方的數的和。
輸入: rowIndex = 3
輸出: [1,3,3,1]
class Solution { public List<Integer> getRow(int rowIndex) { List<List<Integer>> res = new ArrayList<List<Integer>>(); for (inti = 0; i <= rowIndex; i++) { List<Integer> row = new ArrayList<Integer>(); for (int j = 0; j <= i; j++) { if (j == 0 || j == i) row.add(1); else row.add(res.get(i - 1).get(j - 1) + res.get(i - 1).get(j)); } res.add(row); }return res.get(rowIndex); } }
注意到對第i+1行的計算僅用到了第i行的資料,因此可以使用滾動陣列的思想優化空間複雜度。
class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> pre = new ArrayList<Integer>(); for (int i = 0; i <= rowIndex; ++i) { List<Integer> cur = newArrayList<Integer>(); for (int j = 0; j <= i; ++j) { if (j == 0 || j == i) { cur.add(1); } else { cur.add(pre.get(j - 1) + pre.get(j)); } } pre = cur; } return pre; } }
只用一個數組,我們可以倒著計算當前行,這樣計算到第i項時,第i-1項仍然是上一行的值。
class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> row = new ArrayList<Integer>(); row.add(1); for (int i = 1; i <= rowIndex; ++i) { row.add(0); for (int j = i; j > 0; --j) { row.set(j, row.get(j) + row.get(j - 1)); } } return row; } }
知識點:無
總結:無