您的位置:首页 > 其它

119. Pascal's Triangle II

2017-07-26 15:32 357 查看

题目描述

Given an index k, return the kth row of the Pascal’s triangle.

For example, given k = 3,

Return [1,3,3,1].

思路

得到第k+1行的一整列的值。

解法1得到前k+1行的值,将最后一行的return就可以。

解法2,只用一个一维数组,前一行的数变成后一行时:

直接在后面添加一个1

从倒数第二个开始等于倒数第二个+倒数第三个,也就是相邻的两个相加,形成新的行的值,又不会破坏还未算的数。

例如:1 2 2 1 首先添加个1,变为1 2 2 1 1 然后从倒数第二个开始变化,相邻两个相加。

第一次:1 2 2 3 1

第二次:1 2 4 3 1

第三次:1 3 4 3 1

这样就得到了下一行的数,每次都是一样的方法。

代码

解法1:

class Solution {
public:
vector<int>  getRow(int numRows) {
vector< vector<int> > res(numRows+1);
vector<int> t;
int i, j;
for(i = 0; i < numRows+1; i++)
{
res[i].resize(i+1);//第i行分配i个列 不可一下子分配n行n列
res[i][0] = 1;
res[i][res[i].size()-1] = 1;
for(j = 1; j < i; j++)
{
res[i][j] = res[i-1][j-1] + res[i-1][j];
}
}
for(j = 0; j < numRows+1; j++)
{
t.push_back(res[numRows][j]);
}
return t;
}
};


解法2:

class Solution {
public:
vector<int>  getRow(int numRows) {
vector<int> t;
int i, j;
t.push_back(1);
if(numRows == 0)
return t;
t.push_back(1);//numRows = 1时 结果是1 1
for(i = 2; i <= numRows; i++)
{
t.push_back(1);//先写入1
for(j = i - 1; j > 0; j--)
{
t[j] = t[j] + t[j-1];//形成新的数
}
}
return t;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: