leetcode 118. Pascal's Triangle (ArrayList、List與思路難)
阿新 • • 發佈:2018-12-10
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;
}
}