【5分钟力扣】118.杨辉三角 python
生活随笔
收集整理的這篇文章主要介紹了
【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 nums2、遞歸方法
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 s3、動態規劃
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wget下载报错403
- 下一篇: matlab函数sinh,matlab