- 题目描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
- 示例
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
- 解决思路
思路就是根据行数来不断产生当前行的一维数组,并把当前的一维数组添加到整个三角形的二维数组里。一开始我没有动手写,光在那想,就觉得难点在于怎么在每一行创建一个不定长的数组,怎么把这个数组加到二维数组里。其实都是数组操作里最基础的东西。
- 代码
class Solution(object):
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
result = []
for i in range(numRows):
#在第i行创建长度为i+1的一维数组,因为数组计数从0开始
now = [1] * (i+1)
if i >= 2:
#从当前行第2个元素遍历到第i-1个元素,因为每一行的头和尾都是1
for j in range(1,i):
#当前行的第j个元素 = 前一行的第j个元素 + 前一行第j-1个元素
now[j] = pre[j-1] + pre[j]
#把表示当前行的一维数组now转换为二维数组,再加到总的二维数组result里边
result += [now]
#把当前行赋值给表示前一行的数组
pre = now
return result