问题来源:
https://leetcode-cn.com/problems/pascals-triangle/来源:力扣(LeetCode)
问题描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
分析:
1第一,二行是固定的,只有1
2任意一行,开头和结尾都是1
3总共有i行i列
4当i行j列时,后续i行的情况,i行的数字是根据i-1行的j-1列,i-1行的j列相加得到的
package package1128;
import java.util.ArrayList;
import java.util.List;
//杨辉三角
public class PascalTriangle {
public List<List<Integer>> genenrate(int numRows){
if(numRows<=0){
return new ArrayList<>();
}
List<List<Integer>> result=new ArrayList<>();
//先插入第一行
List<Integer> firstLine=new ArrayList<>();
firstLine.add(1);
result.add(firstLine);
if(numRows==1){
return result;
}
//再把第二行插入
List<Integer> secondLine=new ArrayList<>();
secondLine.add(1);
secondLine.add(1);
result.add(secondLine);
if(numRows==2){
return result;
}
//后续i行的情况
for(int row=3;row<=numRows;row++){
//为了知道当前行的内容,需要先知道上一行
List<Integer> prevLine=result.get(row-1);
//创建一个表示当前行的List
List<Integer> curLine=new ArrayList<>();
//当前行中填充一些元素
//当前行的第0列是1
curLine.add(1);
//后续的列(从第一列开始)都是根据prevLine获取
for(int col=1;col<row-1;col++){
curLine.add(prevLine.get(col-1)+prevLine.get(col));
}
//加上最后一列1
curLine.add(1);
result.add(curLine);
}
return result;
}
}