给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
解题思路:
(1)第n行恰好有n个元素
(2)每一行的开头和结尾全是1
(3)中间位置元素值为[i,j]=[i-1,j-1]+[i-1,j]
例如下面:第三行第二列
[3,2]=[2,1]+[2,2]
第四行第三列:[4,3]=[3,2]+[3,3]
(4)特殊行是第一行和第二行。
ublic class num118 {
public List> generate(int numRows){
List> retList = new ArrayList<>();
//特殊的第一行和第二行
List first = new ArrayList<>();
first.add(1);
retList.add(first);
if (numRows == 1){
return retList;
}
//组装第二行
List sec = new ArrayList<>();
sec.add(1);
sec.add(1);
retList.add(sec);
if(numRows == 2){
return retList;
}
//此时numRows至少是3行
for (int i = 3;i <= numRows; i++){
List prev = retList.get(i-1-1);
List cur = new ArrayList<>();
//每一行第一个元素都是1
cur.add(1);
for(int j = 2; j < 1; j++){
//[i,j]=[i-1,j-1]+[i-1,j]
int tmpValue = prev.get(j-1-1) + prev.get(j-1);
cur.add(tmpValue);
}
//每一行最后一个元素为1
cur.add(1);
}
return retList;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)