LeetCode 119. Pascal's Triangle II

LeetCode 119. Pascal’s Triangle II

Description:

Given an index k, return the kth row of the Pascal’s triangle.

For example, given k = 3,
Return [1,3,3,1].


分析:

可以在118题修改一下,返回res[rowIndex]即可。具体可以看看我的这篇文章http://blog.csdn.net/sinat_31790817/article/details/78806130
看了LeetCode上面的一个Discuss,代码我也粘贴出来的,注释里another version那个就是。很神奇的代码,先初始化rowIndex+1的vector为0,从后面开始往前计算,可以得到结果。

代码如下:

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
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<vector<int> > res;
// 行数
res.resize(rowIndex + 1);
for (int i = 0; i < rowIndex + 1; i++) {
// 每一行的列数
res[i].resize(i + 1);
// 初始化每一行的头尾,置为1
res[i][0] = 1;
res[i][i] = 1;
}
// 第0行和第1行不用算,已经初始化了
for (int i = 2; i < rowIndex + 1; i++) {
for (int j = 1; j < i; j++) {
// 当前行当前列的数等于前一行前一列的数加上前一行当前列的数
res[i][j] = res[i - 1][j - 1] + res[i - 1][j];
}
}
return res[rowIndex];
}
};
int main() {
Solution s;
int rowIndex;
cin >> rowIndex;
vector<int> res = s.getRow(rowIndex);
for (int i = 0; i < res.size(); i++) {
cout << res[i] << " ";
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// another version
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> vi(rowIndex + 1);
vi[0] = 1;
for (int i = 1; i <= rowIndex ; ++i)
{
for (int j = i; j > 0; --j)
{
vi[j] = vi[j] + vi[j-1];
}
}
return vi;
}
};
------本文结束感谢阅读------