1. 程式人生 > >【leetcode之旅】陣列

【leetcode之旅】陣列

給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。

在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:

輸入: 5
輸出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]
public class PascalTriangle {
    public static void main(String[] args) {
        List<List<Integer>> generate = new PascalTriangle().generate(5);
        for (List<Integer> integerList : generate){
            for (int i = 0; i < 5 - integerList.size(); i++) {
                System.out.print(" ");
            }

            for (int i = 0; i < integerList.size(); i++) {
                System.out.print(integerList.get(i) + " ");
            }
            System.out.println();
        }
    }
    /**
     * 小的集合用於儲存每一行的資料
     * 大的集合用於儲存小的集合
     * @param numRows
     * @return
     */
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> lists = new ArrayList<>();
        List<Integer> integerList = new ArrayList<>();
        //迴圈遍歷numRows
        for (int i = 0; i < numRows; i++) {
            //將每次的數進行初始化為1
            integerList.add(0,1);
            //當集合大於2時,進入該迴圈,將除了第一個數和尾數的值通通經過上一個數的相鄰的和加起來,並修改值
            for (int j = 1; j < integerList.size() - 1; j++) {
                integerList.set(j,integerList.get(j+1) + integerList.get(j));
            }
            //重新建立一個新集合,將資料新增到總集合中
            lists.add(new ArrayList<>(integerList));
        }
        return lists;
    }
}

測試結果: