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?
我的代码
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> temp1;
vector<int> temp2;
for(int num = 0;num <= rowIndex;num++)
{
temp1.clear();
temp1.push_back(1);
int i = 0;
while(i<num-1)
{
temp1.push_back(temp2[i] + temp2[i+1]);
i++;
}
if(num!=0) temp1.push_back(1);
temp2 = temp1;//这里可能会让人误解,vector也可以这样赋值吗?C++PRIMER P283
}
return temp1;
}
};
我上面的代码,要循环rowIndex次才能得到我想要的结果,那么可不可以直接得到我想要的这一行呢?
在网上看到的code
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> answer;
answer.push_back(1);
double n = 1, m = 1;
for (int i = 1; i <= rowIndex; i++) {
n *= (rowIndex - i + 1);//直接找到这一行rowInde+1个数之间的关系。
m *= i;
answer.push_back((int) (n / m + 0.5));
}
return answer;
}
};
上述的代码是直接找到了Pascal's Triangle中那一行的关系,这个关系就是排列组合Cnk(n中取k),
举个例子,第5行为1,4,6,4,1 rowIndex = 4
那么C4(0) = 1 C4(1)=4 C4(2) = 6 C4(3) = 4 C4(4) =1