您的位置:首页 > 其它

LeetCode 118. Pascal's Triangle

2017-12-14 19:22 330 查看

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的操作不太熟悉,还得继续刷题。

代码如下:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode