给出一个二维m*n矩阵grid,含有非负整数。找出一条路径从最左上角到右下角,使之经过元素之和最小。假定只能向右或向下移动。
思路:
二维数组path记录以当前位置结束的路径的最小和,比如,path[i][j]代表从grid[0][0]开始到grid[i][j]结束的最小路径和。
程序最后返回path[m-1][n-1],即从最左上角到右下角的最小路径的和
public static int minPathSum(int[][] grid){ int m = grid.length,n=grid[0].length; int[][] path = new int[m][n]; path[0][0] = grid[0][0]; for(int i=1;i<m;i++){ path[i][0] = path[i-1][0] + grid[i][0]; //初始化左边界 } for(int j=1;j<n;j++){ path[0][j] = path[0][j-1] + grid[0][j]; //初始化右边界 } for(int i=1;i<m;i++){ for(int j=1;j<m;j++){ path[i][j] = Math.min(path[i][j-1]+grid[i][j], path[i-1][j]+grid[i][j]); } } return path[m-1][n-1]; }