118.杨辉三角
用动态二维数组来解决杨辉三角
vector<vector>arr(numRows,vector(0));
对于vector 里的 vector 的定义 vector(0) 初始化的时候,定一个0长的列(动态)
每个数是它左上方和右上方的和 这个条件 必须在numRows >=3 时才能使用
因此 在numRows = 1 || 2 时 需要直接用判断语句来直接输出
在numRows >=3 的情况下
先将前2行 按照numRows = 2的情况 放入数组
再使用循环来输出接下来的每一行
每一行 首先都是先push_back(1) 最后结尾也是push_back(1)
最重要的是中间的 递归部分
由于中间部分元素个数为 该行的总元素个数-左右两边的1 即为 arr[i].size() -2 (这里的i表示行数)
循环中间部分 中间这一部分 每一个元素 由左上和右上两个元素相加得来
arr.push_back(arr[i-1][j] + arr[i-1][j+1])
以下是AC代码
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>>arr(numRows,vector<int>(0));
if(numRows == 1)
arr[0].push_back(1);
else if(numRows == 2)
{
arr[0].push_back(1);
arr[1].push_back(1);
arr[1].push_back(1);
}
else
{
arr[0].push_back(1);
arr[1].push_back(1);
arr[1].push_back(1);
for(int i = 2;i<numRows;i++)
{
arr[i].push_back(1);
for(int j = 0;j<arr[i-1].size()-1;j++)
{
arr[i].push_back(arr[i-1][j]+arr[i-1][j+1]);
}
arr[i].push_back(1);
}
}
return arr;
}
};