最最最最基础的动态规划!(力扣64: 最小路径)

题目:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

虽然这道题是mid难度,但是做起来并没有mid的难度。

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        n,m=len(grid[0]),len(grid)
        
        for i in range(m):
            for j in range(n):
                if i-1>=0 and j-1>=0:
                    grid[i][j]=min(grid[i-1][j],grid[i][j-1])+grid[i][j]
                elif i-1>=0 and j-1<0:
                    grid[i][j]=grid[i-1][j]+grid[i][j]
                elif i-1<0 and j-1>=0:
                    grid[i][j]=grid[i][j-1]+grid[i][j]
        return grid[-1][-1]

题目中最重要的信息就是说明这段话。

这段话可以推导出dp(动态规划)的规律。

走到某一个点,出发点只能是从这个点的前面一个点 或者 上面一个点。

写了3个if判断    

第一个是前面和上面这个点存在。(i 指的是第i行,j指的是第j列)

if i-1>=0 and j-1>=0:

那肯定就是取两个点中值比较小的点,然后加上本生咯。 

第二个是如果上面的点存在,但是前面的点不存在。

elif i-1>=0 and j-1<0:

那只能是上面这个点的值加上这个点的值咯 

第三个是如果上面的的点不存在,但是前面的点存在。

elif i-1<0 and j-1>=0:

同理! 

可能会想,不是还有第四情况吗,俩个点都不存在。这个情况会发生在(0,0)这个位置,不用特别分析,这个点值。

这个题目特殊的地方是它不需要其他额外空间取存dp(80%的动态规划需要再拿出一些空间存储)。原因就是可以在原有的grid空间内直接改变之中的值。

小王还会分享其他力扣做题体会心得哦。感谢关注 O vv O!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值