118
题目:
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
思路:
可以发现从第三行开始,从第二个元素到倒数第二个元素,每个元素都是左上方和正上方元素的和。
先初始化全1的半个矩阵,然后如果行数大于2,就从第三行开始遍历,改变对应位置的值。
代码:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
// 初始化
vector<vector<int>> num;
num.resize(numRows);
int i = 0, j = 0;
for(i = 0; i < numRows; i++){
num[i].resize(i+1);
}
// 都赋值为1
for(i = 0; i < num.size(); i++){
for(j = 0; j < num[i].size(); j++){
num[i][j] = 1;
}
}
// 如果大于2
if(numRows > 2){
for(i = 2; i < num.size(); i++){
for(j = 1; j < num[i].size()-1; j++){
num[i][j] = num[i-1][j-1] + num[i-1][j];
}
}
}
return num;
}
};
知识补充:
1. vector中数组初始化尺寸用到的是 resize 函数
// 重设容器大小以容纳 count 个元素。
void resize( size_type count );
2. vector二维数组的遍历
for(i = 0; i < num.size(); i++){
for(j = 0; j < num[i].size(); j++){
num[i][j] = 1;
}
}
119
题目
给定一个非负索引 rowIndex
,返回「杨辉三角」的第 rowIndex
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
注意的点:
这里给的是索引,即下标,如果我们说索引是3,那么它实际上是第4行
代码:
class Solution {
public:
vector<int> getRow(int rowIndex) {
// 初始化
vector<vector<int>> num;
num.resize(rowIndex+1);
int i = 0, j = 0;
for(i = 0; i < num.size(); i++){
num[i].resize(i+1);
}
// 都赋值为1
for(i = 0; i < num.size(); i++){
for(j = 0; j < num[i].size(); j++){
num[i][j] = 1;
}
}
// 改变值,从第三行开始
if(rowIndex+1 > 2){
for(i = 2; i < num.size(); i++){
for(j = 1; j < num[i].size() - 1; j++){
num[i][j] = num[i-1][j-1] + num[i-1][j];
}
}
}
return num[rowIndex];
}
};