您的位置:首页 > 其它

【LeetCode】118_Pascal's Triangle

2015-08-19 20:29 323 查看

题目


Pascal's Triangle

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]
]


解析

很简单,下一行第j元素用上一行相同的位置和前一个位置的和即可。需要注意的就是两边都是1

直接上代码

class Solution {
public:
vector<vector<int>> generate(int numRows){
vector<vector<int>> ret;
for (int i = 0;i<numRows;i++)
{
vector<int> tmp(i+1);
tmp[0] = 1;
tmp[i] = 1;
for (int j = 1;j<i;j++)
{
tmp[j] = ret[i-1][j]+ret[i-1][j-1];
}
ret.push_back(tmp);
}
return ret;
}
};


方法挺简单的,可以优化的地方在于其实他是左右对称的,没必要把一行全计算一遍。

看看大神的代码

从左到右

class Solution {
public:
vector<vector<int>> generate(int numRows){
vector<vector<int> > result;
if(numRows == 0) return result;
result.push_back(vector<int>(1,1)); //first row
for(int i = 2; i <= numRows; ++i)
{
vector<int> current(i,1); // 本行
const vector<int> &prev = result[i-2]; // 上一行
for(int j = 1; j < i - 1; ++j)
{
current[j] = prev[j-1] + prev[j]; // 左上角和右上角之和
}
result.push_back(current);
}
return result;
}
};


从右到左

class Solution {
public:
vector<vector<int>> generate(int numRows){
vector<vector<int> > result;
vector<int> array;
for (int i = 1; i <= numRows; i++)
{
for (int j = i - 2; j > 0; j--)
{
array[j] = array[j - 1] + array[j];
}
array.push_back(1);
result.push_back(array);
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: