上周在搞华为比赛,所以没更新,这周我们继续!!!
2022.5.30今天你刷题了吗???
题目:
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
分析:
这是我们经常遇见的经典例题,简单来说这种题目要利用数据本身规律来做!本题中,除开第一行第二行全为1,其他行任意一个数字=它上一行对于下标以及下标-1处两个值相加!
解析:
前两行输出利用第一个for循环输出,第三行的输出中间的数字则利用第二个for循环
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ret(numRows);
for (int i = 0; i < numRows; ++i) {
ret[i].resize(i + 1);
ret[i][0] = ret[i][i] = 1;
for (int j = 1; j < i; ++j) {
ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
}
}
return ret;
}
};
补充:
返回类型是嵌套vector,所以输出的时候利用两个for输出
for (vector<vector<int>>::iterator it = ret.begin(); it != ret.end(); it++)
{
//(*it)=小容器vector<int>
for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
{
cout << *vit << " ";
}
cout << endl;
}