LCR 099. 最小路径和
解题思路
- 采用动态规划的思路
- 每次搜索都是向上或者向左进行搜索
- dp(grid, i, j) 的值取决于 dp(grid, i - 1, j) 和 dp(grid, i, j - 1) 返回的值。
- 同时(i,j)到(i - 1,j - 1)有两种方法,所以一定存在重叠子问题
- 设置备忘录Memo存储dp过程中所有重叠子问题的解
class Solution {
int[][] memo;
public int minPathSum(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
memo = new int[m][n];
for(int[] row:memo){
Arrays.fill(row,-1);
}
return dp(grid,grid.length - 1,grid[0].length - 1);
}
int dp(int[][] grid,int i,int j){
if(i == 0 && j == 0){
return grid[0][0];
}
if(i < 0 || j < 0){
return Integer.MAX_VALUE;
}
if(memo[i][j] != -1){
return memo[i][j];
}
memo[i][j] = Math.min(dp(grid,i - 1,j),dp(grid,i,j - 1)) + grid[i][j];
return memo[i][j];
}
}