动态规划:f[i][j]表示从(0,0)走到(i,j)的最小路径和。状态转移:情况1从上方来到,即f[i-1][j],情况2从左边来到,即f[i][j-1],两者取最小值。原地操作来节省内存,这样需要记录matrix[i][j]的值。
import java.util.*;
public class Solution {
/**
*
* @param matrix int整型二维数组 the matrix
* @return int整型
*/
public int minPathSum (int[][] matrix) {
// write code here
int n = matrix.length, m = matrix[0].length;
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
int x = matrix[i][j];
if(i - 1 >= 0) {
matrix[i][j] = matrix[i-1][j] + x;
}
if(j - 1 >= 0) {
if(matrix[i][j] > x) {
matrix[i][j] = Math.min(matrix[i][j],matrix[i][j-1] + x);
} else {
matrix[i][j] = matrix[i][j-1] + x;
}
}
}
}
return matrix[n-1][m-1];
}
}