119. 楊輝三角 II
阿新 • • 發佈:2019-02-09
給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。
在楊輝三角中,每個數是它左上方和右上方的數的和。
示例:
輸入: 3 輸出: [1,3,3,1]
進階:
你可以優化你的演算法到 O(k) 空間複雜度嗎?
class Solution { public List<Integer> getRow(int rowIndex) { Integer[] result = new Integer[rowIndex+1]; Arrays.fill(result, 0); result[0] = 1; for(int i = 1; i<result.length; i++) { for(int j=i;j>0;j--) { result[j] = result[j] + result[j-1]; } } return Arrays.asList(result); } }
思路是在O(k)的空間複雜度的限制下,在長度為k的陣列內部,從楊輝三角的第一行開始依次計算到第k行的最終結果。
程式碼中i的值是第k行,j是第j個數。j從i開始,是因為第i行共有i+1個數字,從後往前計算,避免了第i-1行計算結果被覆蓋丟失。
主要需要理解的是楊輝三角可以看成是一行行的陣列
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
每一個數組都比上一個陣列多一個數,第一位和最後一位都是1, 其餘數字都是上一個陣列對應位置和前一位置的數字的和 a[i][j] = a[i-1][j] + a[i-1][j-1]