LeetCode0119-楊輝三角II
阿新 • • 發佈:2020-12-21
技術標籤:LeetCode演算法java資料結構leetcode楊輝三角II
LeetCode0119-楊輝三角II
題目:
給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。
在楊輝三角中,每個數是它左上方和右上方的數的和。
示例:
輸入: 3
輸出: [1,3,3,1]
進階:
你可以優化你的演算法到 O(k) 空間複雜度嗎?
程式碼:
import java.util.ArrayList;
import java.util.List;
/**
* 0119-楊輝三角II
* 給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。
* <p>
* 在楊輝三角中,每個數是它左上方和右上方的數的和。
* <p>
* 示例:
* <p>
* 輸入: 3
* 輸出: [1,3,3,1]
* <p>
* 進階:
* <p>
* 你可以優化你的演算法到 O(k) 空間複雜度嗎?
*/
/**
* 題目要求使用 O(K)的空間複雜度,所以只能建立一個集合。我們知道第 i 行的第 j 個 數的值, 是
* i-1 行當中j-1 和 j 值的和。由於只有一個集合,所以需要不斷的覆蓋,所以第 j 個數的值等於前一個
* 值加上當前值的和。因為集合中的值是不斷覆蓋,所以獲取到的前一個值並不是我們想要的(因為上次迴圈把
* 覆蓋了)
*
* 解決方法:
* - 建立一箇中間變數記錄前一個值
* - 逆序構造每一行
*/
class Solution {
public List<Integer> getRow(int rowIndex) {
List< Integer> list = new ArrayList<>();
list.add(1);
for (int i = 0; i < rowIndex; i++) {
for (int j = i; j >= 1; j--) {
list.set(j, list.get(j - 1) + list.get(j));
}
list.add(1);
}
return list;
}
}
/**
* 測試
*/
public class Study0119 {
public static void main(String[] args) {
System.out.println(new Solution().getRow(3));
}
}