题目源自于leetcode118 杨辉三角
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
该题目是一道简单的动态规划题,解决思路参考
vector<vector<int>> generate(int numRows) {
//0与n-1项是1 1是上一列0与1的和 2是1与2 3是2与3
vector<vector<int>> result(numRows);
result[0] = { 1 };
if (numRows < 1) return result;
for (int i = 1; i < numRows; i++) {
int l = result[i - 1].size() + 1;
result[i].resize(l);
result[i][0] = 1;
result[i][l - 1] = 1;
for (int j = 1; j < l - 1; j++) {
result[i][j] = result[i - 1][j - 1] + result[i - 1][j];
}
}
return result;
}
int main() {
int numRows = 5;
vector<vector<int>> result = generate(numRows);
for (auto i : result) {
for (auto j : i) {
cout << j << ' ';
}
cout << endl;
}
return 0;
}
但是这里需要注意,因为直接访问了vector的角标,所以必须要预先分配大小,否则会报错
分配大小的体现在
vector<vector<int>> result(numRows);和result[i].resize(l);中