难度等级:Easy。
题目描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解题思路:
杨辉三角是二项式系数的一种写法,如果熟悉杨辉三角的五个性质,那么很好生成,可参见http://www.cnblogs.com/grandyang/p/4031536.html,具体生成算法:每一行的首个和结尾一个数字都是1,从第三行开始,中间的每个数字都是上一行的左右两个数字之和。
class Solution {
public:
vector<vector<int>> generate(int numRows) {
//构造二维vector
vector<vector<int>> res(numRows, vector<int>());
int i = 0;
int j = 0;
if(numRows == 0) return res;
for(i = 0; i < numRows; i++)
{
//每一行初始化为1
res[i].resize(i + 1, 1);
//i = 2时(第三行)才会进这个循环
for(j = 1; j < i; j++)
{
res[i][j] = res[i - 1][j] + res[i - 1][j - 1];
}
}
return res;
}
};
总结:
1)二维vector声明并初始化:
vector<vector> res(numRows, vector());
2)每一行都赋初值为1:
res[i].resize(i + 1, 1);
resize()函数用法见我的另一篇博文:
https://blog.csdn.net/dong87871311/article/details/103284158
3)下一行的值由上一行相加得到
res[i][j] = res[i - 1][j] + res[i - 1][j - 1];