带权的最小路径和

该博客讨论了如何解决寻找二维数组中从左上角到右下角的最小路径和问题。题目要求只能向下或向右移动,对于第一行和第一列有特殊处理。博主通过举例解释了特殊情况,并提出解决方案,即对于其他位置,取其上方和左边值的较小者与当前位置值相加。最后,博主给出了解题思路的示意图和代码实现。
摘要由CSDN通过智能技术生成

题目描述:给定一个由非负整数填充的m x n的二维数组,现在要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径。
注意:你每次只能向下或向右移动。
示例:
输入:[[1,2],[5,6],[1,1]]
输出:8
题目链接:https://www.nowcoder.com/practice/23462ed010024fcabb7dbd3df57c715e?tpId=46&tqId=29115&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking
如图:
在这里插入图片描述
因为题目说过只能下下走或者向上走,所以第一行和第一列必须得特殊处理一下,如果是第一行,那么他只能向右走,如果是第一列那么它只能是向下走.
举个栗子:
在这里插入图片描述
如上图:
要想得到2位置的带权路径和,那么只能是从他的左边位置,也就是和他左边的1相加,因为他前边的值只能向右走,没有向下走的值(因为他是第一行),想要获得5位置的带权路径和,它也只能是和他上边的数相加,因为他没有向右走的值(因为此时他是第一列),他下边的1也是同理.
特判完了之后,我们接下来看其他位置,其实其他位置的值都有从它自己的上方来的和左边来的.所以就取那两个值中最小的和当前的值相加就可以.
解法如图:
在这里插入图片描述
话不多说,直接上代码

/*状态:
 子状态:从(0,0)到达(1,0),(1,1),(2,1),...(m-1,n-1)的最短路径
 F(i,j): 从(0,0)到达F(i,j)的最短路径
状态递推:
 F(i,j) = min{F(i-1,j) , F(i,j-1)} + (i,j)
初始化:
 F(0,0) = (0,0)
 特殊情况:第0行和第0列
 F(0,i) = F(0,i-1) + (0,i)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值