119. 楊輝三角 II(java)
阿新 • • 發佈:2018-11-26
給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。
在楊輝三角中,每個數是它左上方和右上方的數的和。
示例:
輸入: 3 輸出: [1,3,3,1]程式碼一:
class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> list = new ArrayList<>(); if (rowIndex < 0) return list; list.add(1); if (rowIndex == 0) return list; for (int i = 1; i <= rowIndex ; i++) { for (int j = list.size()-1; j > 0; j--) { list.set(j,list.get(j-1)+list.get(j)); } list.add(1); } return list; } }
進階:
你可以優化你的演算法到 O(k) 空間複雜度嗎?
思路:
在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]
class Solution { public List<Integer> getRow(int rowIndex) { Integer[] result = new Integer[rowIndex+1];//new一個集合類物件,陣列中有rowIndex個元素 Arrays.fill(result, 0);//填充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);//返回一個受指定陣列支援的固定大小的列表(result) } }