1. 程式人生 > >leetcode 118. Pascal's Triangle (ArrayList、List與思路難)

leetcode 118. Pascal's Triangle (ArrayList、List與思路難)

Given a non-negative integer numRows, generate the first numRows of Pascal’s triangle.

In Pascal’s triangle, each number is the sum of the two numbers directly above it.

Example:

Input: 5 Output: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]

題意:輸出給定行數的帕斯卡三角形

bug: 1、想清楚固定的輸出列表只有List,所以可以全域性宣告,列表data是每行都變的,所以每次區域性宣告 2、prev重複聲明瞭兩次,一次new一次list.get() 3、因為外層i和j對應了第幾行第幾個元素,對應位置要取=;但是list和ArrayList的索引值都是從0開始,對應位置時要-1

知識點:Arraylist和List 1、宣告方式List<List<Integer>> list = new ArrayList<>();,new就是建立一個新的; List<Integer> prev = list.get(i - 2);這種也是宣告 2、return null返回空 3、list.add(1); 1是新增進去的數值(新增在陣列的後面) 4、list.get(1); 1是要得到的索引值 5、ArrayList有順序,索引從0開始,可以重複

class Solution {
    public List<List<
Integer>
> generate(int numRows) { if (numRows < 0) { return null; } List<List<Integer>> list = new ArrayList<>();//想象成二維陣列 if (numRows >= 1) { List<Integer> data = new ArrayList<>();//想象成一維陣列 data.
add(1); list.add(data);//第一行 } if (numRows >= 2) { List<Integer> data = new ArrayList<>(); data.add(1); data.add(1); list.add(data);//第二行 } if (numRows >=3) { for (int i = 3; i <=numRows; i++) {//此處設定i=3是為了方便行數對應,相當於前兩行的位置是i=2和i=1 //i代表第幾行,j用來迴圈次數,因為data.add直接放置,不需要定位 List<Integer> data = new ArrayList<>(); List<Integer> prev = list.get(i - 2);//前一行 data.add(1);//當前行的第一個元素 for (int j = 2; j <= i -1; j++) {//當前行中間不為1的元素們 data.add(prev.get(j - 2) + prev.get(j - 1));//當前行的當前元素是前一行的兩個元素之和 } data.add(1);//當前行的最後一個元素 list.add(data);//放置當前行 } } return list; } }