力扣算法:杨辉三角

力扣算法:杨辉三角

  • 一、杨辉三角
    • 1、问题
    • 3、思路
    • 4、代码
    • 5、时间与空间复杂度
  • 备注

一、杨辉三角

1、问题

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

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

杨辉三角具有以下性质:

力扣算法:杨辉三角_第1张图片
示例1:

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

3、思路

思路1:

  1. 按照规律解题,每个数是它左上方和右上方的数的和,即list[i][j] = list[i-1][j+1] + list[i-1][j] 。
  2. 如果每行有 i 个元素,那么第 0 个元素、第 i 个元素均为1。

思路2:

使用python标准库函数进行计算,math.comb(i, j),注意 comb函数只在python3.8及以上版本中存在,点击此处跳转查看 math 详述

4、代码

from typing import List
import math
class Solution:
    def generate1(self, numRows1: int) -> List[List[int]]:
        ret = list()
        for i in range(numRows1):
            row = list()
            for j in range(i + 1):
                row.append(1) if j == 0 or j == i else row.append(ret[i - 1][j - 1] + ret[i - 1][j])
            ret.append(row)
        return ret


    def generate2(self, numRows2: int) -> List[List[int]]:
        return [[math.comb(i, j) for j in range(i + 1)] for i in range(numRows2)]


if __name__ == "__main__":
    solution = Solution()
    print(solution.generate1(5))
    print(solution.generate2(6))

5、时间与空间复杂度

时间复杂度
O(numRows2)。

空间复杂度
O(1),不考虑返回值的空间占用。

备注

转载与参考:
1、LeetCode-Solution
https://leetcode-cn.com/problems/pascals-triangle/solution/yang-hui-san-jiao-by-leetcode-solution-lew9/

你可能感兴趣的:(力扣算法,算法,python,leetcode)