題目描述
Given an index k, return the k th row of the Pascal's triangle.
For example, given k = 3,
Return[1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?
題目大意
給定一個(gè)索引值k,返回楊輝三角中第k行索引的結(jié)果
例如滓彰,給定:k=3州袒,
返回:[1,3,3,1]
空間復(fù)雜度要求為O(k)。
思路
也是一個(gè)楊輝三角的問(wèn)題他匪,但是這個(gè)題不要求返回整個(gè)楊輝三角,只要求返回索引行的結(jié)果依鸥,而且要求空間復(fù)雜度為O(k)畦徘。
因此想到用動(dòng)規(guī)的思想,用一維數(shù)組的動(dòng)態(tài)更新來(lái)模擬二維數(shù)組关筒,但是杯缺,考慮每一行的時(shí)候萍肆,當(dāng)從前向后遞歸時(shí)是有后效影響的,因此采用從后向前迭代的方式塘揣。
代碼
#include<iostream>
#include<vector>
using namespace std;
vector<int> getRow(int rowIndex)
{
rowIndex++; // 行索引加一是真正的行數(shù)
vector<int > res(rowIndex, 1);
// 第一二行均為1亲铡,從第三行才需要進(jìn)行計(jì)算操作
// 因此索引從2開始
for(int i=2; i<rowIndex; i++)
{
for(int j=i-1; j>0; j--)
{
// 每次從后向前迭代
res[j] = res[j-1] + res[j];
}
}
return res;
}
int main()
{
vector<int > res;
int n;
while(true)
{
cout<<"輸入:";
cin>>n;
res = getRow(n);
cout<<"輸出:";
for(int i=0; i<res.size(); i++)
{
cout<<res[i]<<' ';
}
cout<<endl;
}
return 0;
}
運(yùn)行結(jié)果
以上奖蔓。