矩阵的最小路径和算法

阅读: 评论:0

矩阵的最小路径和算法

矩阵的最小路径和算法

题目描述

给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。
示例1
输入:[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]
返回值:12

解题思路

先把矩阵数组列出来,方便好理解:
[1,3,5,9]
[8,1,3,4]
[5,0,6,1]
[8,8,4,0]
题目中说从最左上的元素到达最右下的元素只能通过右走或者往下走,一开始我以为可以通过贪心算法,从最左上元素出发,选择右边或下边两个最小的元素相加,然后循环此步骤,但后来发现不对,因为是全局的最短路径,这里的贪心算法就算走到最右下的位置,也不能代表全局最短,只能表明当前最短。
因此换个思路,既然是全局最短,而且对于每个元素来说,只有他的上边或者左边的位置能到达它,因此我们只要求出最右下的左边和上边元素最小的那个元素a,而最小的那个元素a又需要求出它的左边和上边元素最小的那个,这样分析就有点动态规划的意思了,可以列出公式:
d[i][j]=d[i][j]+min(d[i-1][j],d[i][j-1])
我们需要求出所有元素的累加值,然后最后选d[i][j]的值即是最终结果。
而矩阵数组的第一行只能通过左边的元素累加,第一列只能通过上边的元素累加,因此先求出第一行和第一列的累加值,后续就可以相应地遍历进行累加。

代码实现

import java.util.*;public class Solution {/*** [[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]* @param matrix int整型二维数组 the matrix* @return int整型*/public int minPathSum (int[][] matrix) {int m=matrix.length;int n=matrix[0].length;//给第一列的每个元素算出最短路径和for(int i=1;i<m;i++){matrix[i][0]=matrix[i-1][0]+matrix[i][0];            }//给第一行的每个元素算出最短路径和for(int i=1;i<n;i++){matrix[0][i]=matrix[0][i-1]+matrix[0][i];            }for(int i=1;i<m;i++){for(int j=1;j<n;j++){matrix[i][j]=matrix[i][j]+Math.min(matrix[i][j-1],matrix[i-1][j]);    }}return matrix[m-1][n-1];}}

本文发布于:2024-01-27 09:50:54,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063202691124.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   算法   路径   最小
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23