给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
这个题还是数组的应用问题,二维数组很容易解决这个问题,我的思路是前两个就直接输出,当然如果为零也是直接输出空数组。后面的直接设置两层循环,外层循环是行数的循环,内层循环是每行数字生成,注意到每行开头和结尾都是1,所以内层循环之前和之后,都要对当前数组从后放入1。内层循环结束放如最后一个1后将这个数组放到最终的二维数组最后。内层循环的时候结束条件是当前的行数,开始序号应该是1,因为已经提前添加了开头的1,循环执行的就是上一行当前位置的前一数与上一行当前位置的数之和添加到当前位置。
C++源代码:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> result;
if (numRows==0) return result;
result.push_back(vector<int>{1});
if (numRows==1) return result;
result.push_back(vector<int>{1,1});
if (numRows==2) return result;
for(int i=2;i<numRows;i++)
{
vector<int> temp;
temp.push_back(1);
for(int j=1;j<i;j++)
temp.push_back(result[i-1][j-1]+result[i-1][j]);
temp.push_back(1);
result.push_back(temp);
}
return result;
}
};
python3源代码:
class Solution:
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
l = []
if numRows==0:
return l
l.append([1])
if numRows==1:
return l
l.append([1, 1])
if numRows==2:
return l
for i in range(2, numRows):
temp = [1]
for j in range(1, i):
temp.append(l[i-1][j-1]+l[i-1][j])
temp.append(1)
l.append(temp)
return l