LeetCode刷题之路:118. 杨辉三角

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

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

示例:

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

#最直观的思路
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
设定result用来存放结果
遍历所有的行,当进入新的一行时,应该先append一个[]用来存放改行的数字
接着向该行添加第一个元素1,
随后进入循环开始添加第二个元素=上一行同位置的元素+上一行同位置的前一个元素
循环至每行的倒数的第二个元素
最后判断每行的元素是否小于该行号,
若小于再在末尾添加1(预防numRows=1的情况)

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        result = []
        for i in range(1, numRows + 1):
            result.append([])
            result[-1].append(1)
            # if len(result[-1]) < i-1:
            for j in range(1, i-1):
                result[-1].append(result[-2][j] + result[-2][j-1])
            if len(result[-1]) < i:
                result[-1].append(1)
        return result

#取巧的方法
利用python 的zip函数
首先利用上一行的结果生成两个list
一个list为 在上一行的结果前面添加一个0元素
一个list为 在上一行的结果最后面添加一个0元素
随后将两个list同一位置的元素进行相加得到一个新的list
这个新的list便是下一行的结果

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        if numRows == 0:
            return []
        else:
            results = [[1]]
            while len(results) < numRows:
                newRow = [a + b for a, b in zip([0]+results[-1], results[-1]+[0])]
                print(newRow)
                results.append(newRow)
            return results

猜你喜欢

转载自blog.csdn.net/as812252319/article/details/112796279
今日推荐