题目描述:
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
我的代码:
public class Solution {
/**
* 从二维数组的左上角到右下角的最短路径--动态规划
* @param grid 二维数组
* @return 返回最短路径
*/
public int minPathSum(int[][] grid) {
//获取二维数组的m和n,其中m是行数,n是列数
int m = grid.length;
int n = grid[0].length;
//定义一个数组,用来存储到每个点的最短路径
int[][] dp = new int[m][n];
//如果是到达第一行的某个点,没有其他走法,只能横着走
int sum = 0;
for(int i = 0;i<n;i++){
sum+=grid[0][i];
dp[0][i] = sum;
}
sum = 0;
//如果是到达第一列的某个点,没有其他走法,只能竖着走
for(int i = 0;i<m;i++){
sum+=grid[i][0];
dp[i][0] = sum;
}
//动态规划求到某个点的最短路径
for(int i = 1;i<m;i++){
for(int j = 1;j<n;j++){
dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + grid[i][j];
}
}
//返回到右下角的最短路径
return dp[m-1][n-1];
}
}