题目
动态规划:杨辉三角
给定一个非负整数 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 <= numRows <= 30
代码
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ans;
for(int i=0;i<numRows;i++)
{
vector<int>cur(i+1,1);//每轮声明一个一维数组用来存储每一行的结果
for(int j=1;j<i;j++)
{
cur[j]=ans[i-1][j-1]+ans[i-1][j];
}
ans.push_back(cur);//将该轮的行加入二维数组
}
return ans;
}
};
原理图
原理解释
提示:算法流程及解释在代码中已标注
除了第一列和每行的最后一个元素为1之外,其他的元素都是由上一行所在列的元素与上一行前一列的元素相加得到的。