leetcode_118 杨辉三角

68 阅读1分钟

要求

给定一个非负整数 numRows 生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

Animated2.gif

示例 1:

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

输入: numRows = 1
输出: [[1]]

提示:

  • 1 <= numRows <= 30

核心代码

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        if numRows == 0:
            return []
        rows = [[1]]
        i = 1
        while i < numRows:
            pre_row = rows[-1]
            row = [x + y for x, y in zip(pre_row,pre_row[1:])]
            rows.append([1,*row,1])
            i += 1
        return rows

image.png

解题思路:这个我们的小时候的问题,下面的数字等于其上面两个数字之和,其实比较简单,但是在我们的程序中比较新颖的一个地方是:x + y for x, y in zip(pre_row,pre_row[1:]) 会得到上一排中前一个数和后一个数的和的列表,在*row进行拆包,得到当前行的数据,比较简单,但是思路比较好,值得借鉴。