题目传送地址: ​​https://leetcode.cn/problems/minimum-path-sum/​

运行效率:

Leetcode64. 最小路径和_leetcode


代码如下:

public int minPathSum(int[][] grid) {
//右下角的坐标
int m = grid.length - 1;
int n = grid[0].length - 1;
HashMap<String,Integer> map = new HashMap<>();
int path = minPath(m, n, grid,map);
return path;
}

public int minPath(int m, int n, int[][] grid, HashMap<String,Integer> map) {
String key = m + ":" + n;
if(map.containsKey(key)){
return map.get(key);
}
//处理边界情况
if (m == 0) {
int path = grid[0][n];
while (n > 0) {
path += grid[0][n - 1];
n--;
}
return path;
}
if (n == 0) {
int path = grid[m][0];
while (m > 0) {
path += grid[m-1][0];
m--;
}
return path;
}
//走到(m,n)位置有2种走法,第一种是从(m-1,n)到(m,n) 第二种是从(m,n-1)到(m,n)
int i = minPath(m - 1, n, grid,map);
int j = minPath(m, n - 1, grid,map);
int res = Math.min(i, j) + grid[m][n];
map.put(key,res);
return res;
}