解法1:迭代 。我用了两个循环,而且还有一个辅助vector。时间复杂度O(n^2),空间复杂度O(n),效率不高。
#include <iostream>
#include <vector>
using namespace std;
vector<int> getRow(int rowIndex) {
if (rowIndex==0) return vector<int>(1,1);
if (rowIndex==1) return vector<int>(2,1);
vector<int> result(rowIndex+1, 1);
for (int i=2; i<=rowIndex; ++i) {
vector<int> prevResult=result;
for (int j=1; j<i; ++j) {
result[j]+=prevResult[j-1];
}
}
return result;
}
int main()
{
for (int k=0; k<=4; ++k) {
vector<int> a=getRow(k);
for (auto i:a) cout<<i<<" ";
cout<<endl;
}
return 0;
}
解法2:看到网上有个答案很不错,贴在下面。
vector<int> getRow(int rowIndex) {
vector<int> ans(rowIndex+1, 0);
ans[0] = 1;
for(int i = 1; i <= rowIndex; i++) {
ans[i] = (long long) ans[i-1] * (rowIndex-i+1) / i;
}
return ans;
}
该解法应用了ans[i] = ans[i-1] * (rowIndex-i+1) / i; 这个性质,从而一步到位。时间复杂度O(n),空间复杂度O(1)。