给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
来看看大佬的题解吧
代码实现
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> res = new ArrayList<>();
if(numRows == 0) return res;
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
res.add(new ArrayList(firstRow));
int size = res.size();
//这里用LinkList可以在指定下标位置进行插入,利用这个特性,可以实现上面的思路
while(size < numRows){
LinkedList<Integer> first = new LinkedList<>();
first.addFirst(0);
LinkedList<Integer> second = new LinkedList<>();
second.addLast(0);
for(int x: res.get(size-1)){
first.addFirst(x);
second.addLast(x);
}
List<Integer> newRow = new ArrayList<>();
for(int i=0; i<first.size(); i++){
newRow.add(first.get(i) + second.get(i));
}
res.add(newRow);
size++;
}
return res;
}
}
利用普通的杨辉三角实现方式:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list = new ArrayList<>();
int[][] arr = new int[numRows][numRows];
for(int i=0;i<numRows;i++){
List<Integer> subList = new ArrayList<>();
for(int j=0;j<=i;j++){
if(j==0||i==j){
arr[i][j]=1;
}else{
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
subList.add(arr[i][j]);
}
list.add(subList);
}
return list;
}
}