Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
解法:没有什么,用一个成员是vector的vector逐层生成。
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> r;
vector<int> pre;
vector<int> p;
for(int i=0;i<numRows;i++){
p.clear();
for(int j=0;j<=i;j++){
if(j==i||j==0)p.push_back(1);
else
p.push_back(pre[j-1]+pre[j]);
}
r.push_back(p);
pre=p;
}
return r;
}
};
这道题更深一层就是 Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1]
.
解法:有一种是跟着上一道题,直接返回最后一层。但是这样……效率……
我就知道这种题一定要找规律……我还是太嫩了,最后找到有一个很厉害的公式
v[i]=v[i-1]*(rowIndex+1-i)/i;
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> v;
v.resize(rowIndex+1);
v[0]=v[rowIndex]=1;
for(int i=1;i<=v.size()/2;i++){
v[i]=v[rowIndex-i]=v[i-1]*(rowIndex+1-i)/i;
}
return v;
}
};