题目描述
给定一个二维数组,数组中的元素都是非负整数,找到从左上角到右下角的一条路径使得路径之和最小,返回这个最小路径和。
注意:每次只能向下或者向右移动
示例:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.
解题思路
法一: 回溯 + 剪枝
挺暴力的一个思路,就是向右和下疯狂试探,可以剪枝的几种情况
(1)超出了数组范围
(2)路径总和已经比当前的最小值要大了
出现这两种情况就回到上一层换个方向试探
但是这个方法由于过于暴力,只能过60个用例,最后一个用例input比较长就TLE了,不管怎么样,思路是可以的,贴个代码
class Solution {
int res = Integer.MAX_VALUE;
public int minPathSum(int[][] grid) {
// traceback + cut
if (grid == null || grid.length == 0 || grid[0].length == 0)
return 0;
traceback(grid, 0, 0, 0);
return res;
}
public void traceback(int[][] grid, int row, int column, int curr) {
if (row < 0 || row >= grid.length)
return;
if (column < 0 || column >= grid[0].length)
return;
curr += grid[row<