题目
- 给定一个非负整数
numRows
,生成杨辉三角的前 numRows
行。 - 在杨辉三角中,每个数是它左上方和右上方的数的和。
- 示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
solution
- 思路:输入
numRows
,也就是杨辉三角的前numRows
行。第三行List = [[1]]
,先将三角形第一行的第一个列表[1]
放入空列表,这个时候List
是一个二维列表。第四行for i in range(1, numRows):
进入循环,i
的取值是[1, numRows)
。第五行temp_i = [1] * (i + 1)
,如果是第i
行,那么就生成一个长度为i+1
的列表,该列表的元素全为1,在之后的操作中我们不改变列表两头的数值保持为1,只改变去头去尾的列表元素。第六行if i > 1:
,即第1行列表不涉及有关上一层的加法。第七到八行for j in range(1, i): temp_i[j] = List[i - 1][j - 1] + List[i - 1][j]
,第i
行的第j
个元素是第i-1
行第j-1
个元素和第j
个元素的和。最后将计算好的temp_i
凭借在List
的末尾。 - 执行用时:32 ms, 在所有 Python3 提交中击败了94.06%的用户
- 内存消耗:14.7 MB, 在所有 Python3 提交中击败了91.47%的用户
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
List = [[1]]
for i in range(1, numRows):
temp_i = [1] * (i + 1)
if i > 1:
for j in range(1, i):
temp_i[j] = List[i - 1][j - 1] + List[i - 1][j]
List.append(temp_i)
return List