一、问题描述
二、解题思路
这个题目是典型的动态规划问题,只能从左上角开始,往右或者往下移动。
1.dp数组的初始化:
第一行:设置行总花费变量,每往右走一个格把当前格的花费Cost加到总花费中,总花费就是当前格的最小花费。
第一列:设置列总花费变量,每往下走一个格把当前格的花费Cost加到总花费中,总花费就是当前格的最小花费。
2.状态转移方程:
设当前在第[i][j]位置,从左上角到当前位置的总花费=下面两者较小值加上当前格花费cost
2.1 从左侧格[i][j-1]往右走
2.2 从上侧格[i-1][j]往下走
即:dp[i][j] = Min(dp[i][j-1],dp[i-1][j])+cost
三、代码实现
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param matrix int整型二维数组 the matrix* @return int整型*/public int minPathSum (int[][] matrix) {// 这个题目是典型的动态规划问题int rowLen=matrix.length;int colLen=matrix[0].length;int[][] dpMatrix=new int[rowLen][colLen];//初始化dpMatrixint colCost=0;for(int col=0;col<colLen;col++){//初始化第0行colCost+=matrix[0][col];dpMatrix[0][col]=colCost;}int rowCost=0;for(int row=0;row<rowLen;row++){//初始化第0列rowCost+=matrix[row][0];dpMatrix[row][0]=rowCost;}//每次只能向右或者向下移动for(int row=1;row<rowLen;row++){for(int col=1;col<colLen;col++){int downCost=dpMatrix[row-1][col]+matrix[row][col];int rightCost=dpMatrix[row][col-1]+matrix[row][col];dpMatrix[row][col]=Math.min(downCost,rightCost);}}return dpMatrix[rowLen-1][colLen-1];}
}
四、刷题链接
矩阵的最小路径和_牛客题霸_牛客网