Given an index k, return the kth 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?
#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:
vector<int> generate(int numRows){
vector<vector<int> > temp;
if(numRows<=0) return temp[numRows];
for(int i=0;i<numRows+1;i++){
vector<int> row(i+1);
row[0]=row[i]=1;
for(int j=1;j<i;j++)
row[j]=temp[i-1][j-1]+temp[i-1][j];
temp.push_back(row);
}
return temp[numRows];
}//generate
};
int main(){
Solution sol;
vector<int> temp=sol.generate(3);
int len=temp.size();
for(int i=0;i< len;i++){
cout<<temp[i]<<" ";
}
cout<<"\n"<<endl;
return 1;
}
下面的版本中首先定义了一个长度为k+1的数组,之后没有添加额外的空间。不过看起来可能稍微麻烦一点。利用了数组以中间为对称点的性质
#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:
//----------notice the symmetry between the array--------
vector<int> generate(int numRows){
vector<int> row(numRows+1);//numRows+1 is the real length of the desired vector
if(numRows<=0) return row;
for(int i=0;i<numRows+1;i++){
row[0]=row[i]=1;//fixed the value of the head and the tail
int the_middle=i/2;//the position of the element in the middle
int count=the_middle;
while(count>0){
row[count]=row[count]+row[count-1];//get the first half part of the array
count--;
}
if(i%2==0)
for(int j=1;j<the_middle;j++)
row[the_middle+j]=row[the_middle-j];
if(i%2==1)
for(int j=0;j<the_middle;j++)
row[the_middle+j+1]=row[the_middle-j];
}
return row;
}//generate
};
int main(){
Solution sol;
vector<int> temp=sol.generate(6);
int len=temp.size();
for(int i=0;i< len;i++){
cout<<temp[i]<<" ";
}
cout<<"\n"<<endl;
return 1;
}
下面这个是最好的版本.
#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:
//----------notice the symmetry between the array--------
vector<int> generate(int numRows){
vector<int> row(numRows+1);//numRows+1 is the real length of the desired vector
if(numRows<=0) return row;
row[0]=1;
for(int i=0;i<numRows+1;i++)
for(int j=i;j>=1;j--)
row[j]+=row[j-1];
return row;
}//generate
};
int main(){
Solution sol;
vector<int> temp=sol.generate(6);
int len=temp.size();
for(int i=0;i< len;i++){
cout<<temp[i]<<" ";
}
cout<<"\n"<<endl;
return 1;
}