题目来源:链接: [https://leetcode-cn.com/problems/pascals-triangle/]
118. 杨辉三角
1.问题描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
示例1:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
2.我的解决方案
easy 类型题目。
说实话,动态规划(dynamic programming)类型题目一直是自己的弱点。。。
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res;
if(numRows == 0) {
return res;
}
res.push_back(vector<int>{1}); //第一行
if(numRows == 1) {
return res;
}
res.push_back(vector<int>{1,1}); //第二行
if(numRows == 2) {
return res;
}
for(int i=3; i<=numRows; i++){
vector<int> tmp = res.back(), subres{1}; //back 返回的是 最后一个vector<int>的引用。 subres就是为了 补每行的 第一个 1
for(int j=0; j<tmp.size()-1; j++) {
subres.push_back(tmp[j] + tmp[j+1]); //计算 除了首尾的值 即中间的值
}
subres.push_back(1); //补上最后 一个 1
res.push_back(subres);
}
return res;
}
};
3.大神们的解决方案
思路都差不多。。。处理首尾的 1 的问题上 发生了变化。
代码:
cclass Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> triangle;
for(int i=0;i<numRows;++i)
{
vector<int> rows;
triangle.push_back(rows);
if(i==0)
{
triangle[0].push_back(1);
continue;
}
for(int j=0;j<=i;++j)
{
if(j==0||j==i)
triangle[i].push_back(1);
else
triangle[i].push_back(triangle[i-1][j-1]+triangle[i-1][j]);
}
}
return triangle;
}
};
4.我的收获
1 C++STL中vector容器 begin()与end()函数、front()与back()的用法
继续努力。。。
2019/4/20 胡云层 于南京 60