您的位置:首页 > 其它

[LeetCode 119] - 杨辉三角形II(Pascal's Triangle II)

2013-06-30 19:11 507 查看

问题

给出一个索引k,返回杨辉三角形的第k行。

例如,给出k = 3,返回[1, 3, 3, 1]

注意:

你可以优化你的算法使之只使用O(k)的额外空间吗?

初始思路

首先来复习复习杨辉三角形的性质(来自wiki):

杨辉三角以正整数构成,数字左右对称,每行由1开始逐渐变大,然后变小,回到1。



class SolutionV2 {
public:
std::vector<int> getRow(int rowIndex)
{
std::vector<int> columnInfo(rowIndex + 1);

nFactorial_ = 1;

for(int i = 1; i <= rowIndex; ++i)
{
nFactorial_ *= i;
}

columnInfo[0] = 1;
columnInfo[rowIndex] = 1;

for(int i = 1; i <= rowIndex / 2; ++i)
{
columnInfo[i] = CaculateCombination(rowIndex, i);
}

int left = 1;
int right = rowIndex - 1;

while(left < right)
{
columnInfo[right] = columnInfo[left];
++left;
--right;
}

return columnInfo;
}

private:
int64_t CaculateCombination(int n, int k)
{
int64_t kFactorial = 1;
int64_t restFactorial = 1;

for(int i = 1; i <= k; ++i)
{
kFactorial *= i;
}

for(int i = 1; i <= n - k; ++i)
{
restFactorial *= i;
}

return nFactorial_ / (kFactorial * restFactorial);
}

int64_t nFactorial_;
};


阶乘-有缺陷
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: