问题描述:给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3
输出: [1,3,3,1]
源代码:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> getRow(int rowIndex)
{
vector<vector<int>> sum(rowIndex+1,vector<int>());
int add = 0;
sum[0].push_back(1);
sum[1].push_back(1);
sum[1].push_back(1);
for (int k = 2; k < rowIndex+1; k++)
{
for (int m = 0; m < k+1; m++)
{
if (m == 0)
{
sum[k].push_back(1);
}
else if (m>0 && m < k)
{
add = sum[k - 1][m - 1] + sum[k - 1][m];
sum[k].push_back(add);
}
else
{
sum[k].push_back(1);
}
}
}
return sum[rowIndex];
}
int main()
{
vector<int> result;
result=getRow(4);
//cout << result.size() << endl;
for (int i = 0; i < result.size(); i++)
{
cout << result[i] << endl;
}
system("pause");
return 0;
}
输出结果:
1
4
6
4
1
上述的代码时间复杂度比较高,在这里还有另外一个实现:
vector<int> getRow(int rowIndex)
{
vector<int> out;
if (rowIndex < 0) return out;
out.assign(rowIndex + 1, 0);
for (int i = 0; i <= rowIndex; ++i) {
if ( i == 0) {
out[0] = 1;
continue;
}
for (int j = rowIndex; j >= 1; --j) {
out[j] = out[j] + out[j-1];
}
}
return out;
}