给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1
在力扣中,题目描述中已经给出了杨辉三角的形态:简单来说,每一行最左边的值和最右边的值都为1,中间的值为其肩膀上两个值的和。
那么我们怎么用代码实现呢?我们可以采用逐行迭代的方法:具体来说,我们在第n行要添加4个元素,除了第一个和最后一个元素要为1,中间的元素是上一行列表中肩膀上的数字的和,那么这样的话就好做了,直接看代码:
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
# 方法一:暴力解法
if numRows == 1:
return [[1]]
if numRows == 2:
return [[1], [1, 1]]
origin_list = [[1], [1, 1]]
for rows in range(3, numRows + 1):
origin_list.append([])
for j in range(rows):
if j == 0 or j == rows - 1:
origin_list[rows - 1].append(1)
else:
origin_list[rows - 1].append(origin_list[rows - 2][j - 1] + origin_list[rows - 2][j])
return origin_list
代码优化版本:
result = []
for i in range(numRows):
row = [1] * (i + 1) # 初始化当前行,首尾为1
if i >= 2: # 从第三行开始计算中间值
for j in range(1, i):
row[j] = result[i-1][j-1] + result[i-1][j]
result.append(row)
return result
遇到不懂的问题可以去问一下市面上一些好用的大语言模型,说不定能给出解题思路!
参与评论
手机查看
返回顶部