题目
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1 <= numRows <= 30
解答
- 直接模拟
直接看代码吧 就是直接模拟:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> results; // 初始化结果数组
for (int i = 0; i < numRows; i++) { // 按行进行遍历
// i是当前行号
vector<int > temp_arr(i+1, 1); // 初始化temp_arr数组用于暂时存储每行的数字
for (int j = 0; j <= i; j++) { // 每行的元素等于每行的行号,行号从0开始,所以j <= i
int temp = -1; // 用temp存储一行里单个元素的临时值
if (j == 0 || j == i || i == 1) { // 如果遍历到了这一行的第一个元素或者最后一个元素,或者现在在遍历第一行
continue; // 此时无需赋值,因为temp_arr在初始化的时候给所有元素都是1的值
}
else {
temp_arr[j] = results[i-1][j-1] + results[i-1][j]; // 否则该行元素就是它左上方和右上方的数的和
}
}
results.push_back(temp_arr); // 将遍历完这一行的结果push进最终的结果数组
}
return results;// 返回结果数组
}
};