LeetCode 118. Pascal's Triangle

LeetCode 118. Pascal’s Triangle

Description:

Given numRows, generate the first numRows of Pascal’s triangle.

Example:

For example, given numRows = 5,
Return: [
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]


分析:

观察到每一行的头尾都为1,我们可以初始化每一行的头尾,然后根据当前行当前列的数等于前一行前一列的数加上前一行当前列的数,用两层循环求解。
这道题比较坑的地方是二维数组的初始化问题,一开始我行数和列数都初始化为numRows,导致每一行都有多余的0,其实可以利用resize初始化递增的列数。说到底,遇到这个问题还是对vector的操作不太熟悉,还得继续刷题。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int> > generate(int numRows) {
vector<vector<int> > res;
// 行数
res.resize(numRows);
for (int i = 0; i < numRows; i++) {
// 每一行的列数
res[i].resize(i + 1);
// 初始化每一行的头尾,置为1
res[i][0] = 1;
res[i][i] = 1;
}
// 第0行和第1行不用算,已经初始化了
for (int i = 2; i < numRows; i++) {
for (int j = 1; j < i; j++) {
// 当前行当前列的数等于前一行前一列的数加上前一行当前列的数
res[i][j] = res[i - 1][j - 1] + res[i - 1][j];
}
}
return res;
}
};
int main() {
Solution s;
int numRows;
cin >> numRows;
vector<vector<int> > res = s.generate(numRows);
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < res[i].size(); j++) {
cout << res[i][j] << " ";
}
cout << endl;
}
return 0;
}
------本文结束感谢阅读------