日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【5分钟力扣】118.杨辉三角 python

發布時間:2023/12/31 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【5分钟力扣】118.杨辉三角 python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一、題目
    • 二、解題思路
    • 三、三種解題示例

一、題目

給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。

在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:

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

二、解題思路

本題本質上是一個動態規劃題,楊輝三角需要用前一行的值來構造后一行的值,思路很簡單,主要是找規律。

首先我們先考慮三種特殊情況:

分別是numRows等于0,1和2

其次考慮numRows >=3的情況,也就是每行首尾的值都為1,中間值是:
a[i][j]=a[i?1][j?1]+a[i?1][j]a[i][j]=a[i-1][j-1]+a[i-1][j] a[i][j]=a[i?1][j?1]+a[i?1][j]

三、三種解題示例

1、常規方法

class Solution:def generate(self, numRows: int) -> List[List[int]]:nums = []for row_num in range(numRows):Row = [1 for _ in range(row_num+1)]for i in range(1, len(Row)-1):Row[i] = nums[row_num-1][i-1] + nums[row_num-1][i]nums.append(Row) return nums

2、遞歸方法

class Solution:def generate(self, numRows: int) -> List[List[int]]:if numRows == 0: return [] # 等于0情況if numRows == 1: return [[1]] # 等于1情況s = self.generate(numRows-1) # 遞歸調用s.append([1] + [s[-1][i-1]+s[-1][i] for i in range(1,len(s))] + [1])return s

3、動態規劃

class Solution:def generate(self, numRows: int) -> List[List[int]]:nums = [[1]*(i + 1) for i in range(numRows)] # 列表推導式生成儲存1的列表n = 2 while n < numRows: # 從第三行開始遍歷每一行for i in range(1, len(nums[n]) - 1): nums[n][i] = nums[n - 1][i - 1] + nums[n - 1][i]n += 1 return nums

總結

以上是生活随笔為你收集整理的【5分钟力扣】118.杨辉三角 python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。