Leetcode链接: link.
解题思路:
①对于题目中的返回值vector<vector<int>>
意思的理解
②对杨辉三角型做一个基本的轮廓
对我所开辟的vector<int>
的数组预留行数个空间,并且观察到每一个数组的收尾地方都是1,其他的地方都只为0
③找到那些都为0的地方,因为题目说“在杨辉三角中,每个数是它左上方和右上方的数的和”,所以就类比于想在遍历二维数组一样,对这些地方进行填值。最终返回这个类型vector<vector<int>>
class Solution {
public:
vector<vector<int>> generate(int numRows) {
//vector<vector<int>> 需要好好的理解一下这个返回值,vector里面还嵌套了有个vector
vector<vector<int>> vv;
vv.resize(numRows,vector<int>());
//这样杨辉三角的初始位置就已经出现了
for(size_t i = 0;i < vv.size();++i)
{
vv[i].resize(i+1,0);
//然后后面就想象成一个二维数组去思考
vv[i][0] = 1;
vv[i][vv[i].size()-1] = 1;
}
//此时就是要把为0的位置都填上(左上角的值和右上角的值相加的结果)
for(size_t i = 0;i < vv.size();++i)
{
for(size_t j = 0; j<vv[i].size();++j)
{
if(vv[i][j] == 0)
{
vv[i][j] = vv[i-1][j-1] + vv[i-1][j];
}
}
}
return vv;
}
};