您的位置:首页 > 其它

leetcode刷题记录-118. Pascal's Triangle

2018-03-25 14:37 316 查看

leetcode刷题记录-118. Pascal’s Triangle

1.题目要求

  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]

  ]

  

2.问题分析

  计算杨辉三角:每个数字等于上一行的左右两个数字之和,即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,根据该原理即可写出程序

  关键点:当N为0时,应该返回一个空的vector[],而不是一个包含空vector的vector[[]];另外在计算每行的元素时,注意首尾元素的处理即可。总的来说比较容易实现。

3.代码实现

vector<vector<int>> generate(int numRows)
{

//杨辉三角的性质:每个数字等于上一行的左右两个数字之和,即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和
vector<vector<int>>output;
vector<int> row_vec, lastRow_vec;

int i, j, n, temp_right, temp_left;

if (numRows>0)
{
row_vec.push_back(1);
output.push_back(row_vec);
}

if (numRows>1)
{

for (i = 1; i<numRows; i++)//生成每行的vector
{
lastRow_vec = row_vec;
row_vec.clear();
for (j = 0; j <= i; j++)//生成每行的元素
{
temp_left = (j - 1 >= 0) ? lastRow_vec[j - 1] : 0;
temp_right = (j <= i-1) ? lastRow_vec[j] : 0;
//       temp=j>lastRow_vec[j]+lastRow_vec[j-1];
row_vec.push_back(temp_left + temp_right);
}
output.push_back(row_vec);
}

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