动态规划笔记--杨辉三角

本文探讨了使用动态规划解决两道力扣题目:杨辉三角的生成和三角形最小路径和的计算。对于杨辉三角,通过初始化二维数组并逐层迭代计算每个元素的值。对于最小路径和,从下至上遍历,更新每个元素为相邻较小值的和。动态规划在这两个问题中都起到了关键作用,有效地解决了层次依赖的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

力扣题目118,关于杨辉三角的计算方式。

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

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

示例 1:

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

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

这道题这一层的信息跟上一层有很大的关系,这题就很适合于写动态规划的题目。三角形看起来就是一个二维数组,索引值和数组的容量相关的一个数组,其中,大多数的值都是有效的。

也即,生成一个有相同大小的值,其中,初始化可以直接是1,因为需要计算的地方都会被覆盖,并且本身周边区域的赋值就都是1。

dp = [[1] * n for n in range(numRows)]

随后,设定迭代方式,肯定需要两个指针,一个约束层数,一个约束每一层的任何指数,约束条件是层数和每层的个数。

for i in range(numRows):
    for j in range(i):
        dp[i][j] = dp[i-1][j] + d[i-1][j-1]

 同样,还需要约束条件,这里的条件就是判断是否满足处于中间地方的目的,而不是边缘区域,

可以是

if j - 1 < 0 or j + 1 > i:
    continue

#2
if i == 0 or j == 0:
   continue

两种方式都可以。附带完整代码。 

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        dp = [[1] * i for i in range(1,1+numRows)]
        if numRows <= 2:return dp
        for i in range(numRows):
            for j in range(i):
                if j - 1 < 0 or j + 1> i:
                    continue
                dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
        return dp

三角形最小路径和的题目

从下往上进行遍历,寻找到一个符合条件的数,也就是这一行的状态变成依据下一行的叠加状态,不断去叠加形成值。

class Solution:
    def minimunTotal(self, traigle):
        for i in range(len(traigle), 0, -1):
            for j in range(i):
                traigle[i-1][j] = min(traigle[i][j],traigle[i][j-1])
        return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值