矩阵的最小路径和
2017-09-12 19:06
267 查看
public class Solution { public static void main(String[] args) { int[][] array = {{1, 0, 3}, {1, 2, 1}, {2, 0, 1}}; System.out.println("原矩阵: "); Solution.traverseArray(array); System.out.println("矩阵最小路径和为: " + Solution.minPathSum(array)); } /** * 矩阵最小路径和 * * 题目描述:给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。 * * @param grid * @return */ public static int minPathSum(int[][] grid) { if(grid == null || grid.length == 0 || grid[0] == null || grid[0].length == 0) { return 0; } int row = grid.length; int col = grid[0].length; int[][] dp = new int[row][col]; dp[0][0] = grid[0][0]; // 第一列的处理 for(int i = 1; i < row; i++) { dp[i][0] = dp[i-1][0] + grid[i][0]; } // 第一行的处理 for(int j = 1; j < col; j++) { dp[0][j] = dp[0][j-1] + grid[0][j]; } // 其他行列元素的处理 for(int i = 1; i < row; i++) { for(int j = 1; j < col; j++) { dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + grid[i][j]; } } // 遍历dp数组 System.out.println("矩阵最小路径和长度矩阵dp: "); Solution.traverseArray(dp); return dp[row-1][col-1]; } public static void traverseArray(int array[][]) { for(int i = 0; i < array.length; i++) { for(int j = 0; j < array[0].length; j++) { System.out.print(" " + array[i][j]); } System.out.println(); } } }