原题
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1] ]
解法
思想
根据上一行生成下一行,避免重复计算
代码
class Solution {
public List<List<Integer>> generate(int numRows) {
List<Integer> row = new ArrayList();
List<List<Integer>> ret = new ArrayList<List<Integer>>();
for(int n = 0;n<numRows;n++){
row = getRow(n+1,row);
ret.add(row);
}
return ret;
}
//n:第n行,nums:上一行(n-1行)的列表
public List<Integer> getRow(int n,List<Integer> nums){
List<Integer> ret = new ArrayList();
ret.add(1);//第一个1不需要计算
if(n==1){//第一行直接返回
return ret;
}
for(int i=1;i<(n+1)/2;i++){//由上一行的数相加得到结果
ret.add(nums.get(i-1)+nums.get(i));
}
int size = n/2;
for(int i=0;i<size;i++){//镜像处理
ret.add(ret.get(size-i-1));
}
return ret;
}
}
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode118-%e6%9d%a8%e8%be%89%e4%b8%89%e8%a7%92/