给定一个非负整数 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<List<Integer>> ans = new ArrayList<>();
int[] dp = new int[numRows+1];
dp[0] = 1;
for(int i=0;i<numRows;i++) {
for(int j=i;j>=1;j--) {
if(j==i)
dp[j]=1;
else
dp[j]=dp[j]+dp[j-1];
}
List<Integer> list = new ArrayList<>();
for(int j=0;j<=i;j++)
list.add(dp[j]);
ans.add(list);
}
return ans;
}
}
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<>();
if (numRows < 1) return triangle;
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
triangle.add(firstRow);
for (int rownum = 1; rownum < numRows; rownum++) {
List<Integer> row = new ArrayList<>();
List<Integer> prevRow = triangle.get(rownum - 1);
row.add(1);
for (int j = 1; j < rownum; j++) {
row.add(prevRow.get(j - 1) + prevRow.get(j));
}
row.add(1);
triangle.add(row);
}
return triangle;
}
}
c++
class Solution
{
public:
vector<vector<int>> generate(int numRows)
{
vector<vector<int>> v1;
vector<int> lastLine;
for (int i = 1; i <= numRows; i++)
{
vector<int> v2;
for (int j = 0; j < i; j++)
{
if (j == 0 || j == i - 1)
{
v2.push_back(1);
}
else
{
v2.push_back(lastLine[j - 1] + lastLine[j]);
}
}
lastLine = v2;
v1.push_back(v2);
}
return v1;
}
};