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.
动态规划的思想,类似于62 Unique Paths。代码如下:
public class Solution {
public int minPathSum(int[][] grid) {
if (grid.length == 0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
int[][] res = grid;
for (int i = m - 2; i >= 0; i --) {
res[i][n - 1] = res[i][n - 1] + res[i + 1][n - 1];
}
for (int i = n - 2; i >= 0; i --) {
res[m - 1][i] = res[m - 1][i] + res[m - 1][i + 1];
}
for (int i = m - 2; i >= 0; i --) {
for (int j = n - 2; j >= 0; j --) {
res[i][j] = res[i][j] + Math.min(res[i + 1][j], res[i][j + 1]);
}
}
return res[0][0];
}
}