LeetCode 118.杨辉三角
题目
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解题思路
将杨辉三角排成一个直角三角形,每行除了首位和末位为1,其余为该位上方和左上方元素之和。
Java代码实现
class Solution {
public List<List<Integer>> generate(int numRows) {
List <List<Integer>> nums = new ArrayList<>();//这个数据类型类似与一个listlist的元素又是list
if(numRows==0)return nums;
for(int i=0;i<numRows;i++){
List<Integer> list = new ArrayList<>();//每需要生成一行就new一个list对象存储此行数字
for(int j=0;j<=i;j++){//给这个list存杨辉三角一行的值
if(j==0||j==i)list.add(1);//首位或末位值直接赋0
//非首位末位给list追加的值应该是上一行list(nums.get(i-1))的两个值的和,其实与二维数组相似
//一个位置是当前元素的正上方nums.get(i-1).get(j) ,另一个是左上方nums.get(i-1).get(j-1),
else list.add(nums.get(i-1).get(j) + nums.get(i-1).get(j-1));
}
nums.add(list);
}
return nums;
}
}