您的位置:首页 > 其它

矩阵的最小路径和

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string