118. 杨辉三角(dp)
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1 输出: [[1]]
class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ans = new ArrayList<>();if(numRows==0) return ans;for(int i=0;i<numRows;i++){List<Integer> r =new ArrayList<>();for(int j=0;j<=i;j++){if(j==0|| j==i){r.add(1);} else {int val = ans.get(i-1).get(j-1)+ ans.get(i - 1).get(j);r.add(val);}}ans.add(r);}return ans;}
}
List<List<Integer>> ans = new ArrayList<>();
创建一个二维数组(列表的列表),用来存放杨辉三角的结果。
ans.get(i)
表示第 i 行。
if(numRows==0) return ans;
如果行数是 0,直接返回空列表。
if(j==0 || j==i){ r.add(1); }
每行的第一个和最后一个元素都是
1
。
else { int val = ans.get(i-1).get(j-1) + ans.get(i-1).get(j); r.add(val); }
其他位置的数 = 上一行左上方 + 右上方。