LeetCode-064-最小路徑和
阿新 • • 發佈:2020-12-13
給定一個包含非負整數的 m x n 網格 grid ,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例 1:
輸入:grid = [[1,3,1],[1,5,1],[4,2,1]]
輸出:7
解釋:因為路徑 1→3→1→1→1 的總和最小
示例 2:
輸入:grid = [[1,2,3],[4,5,6]]
輸出:12
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/minimum-path-sum
解題思路
在矩陣上修改
- 最左上角的位置, 不用修改
- 第一行的位置只能從該位置的左邊往右走,
grid[i][j] += grid[i][j - 1]
- 第一列的位置只能從該位置的上邊往下走,
grid[i][j] += grid[i - 1][j]
- 剩下的位置, 將選擇從該位置的左邊或上邊中路徑權值小的
grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1])
返回最後一個位置grid[m - 1][n - 1]
程式碼
class Solution {
public int minPathSum(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 && j == 0) {
continue;
} else if (i == 0) {
grid[i][j] += grid[i][j - 1];
} else if (j == 0) {
grid[i][j] += grid[i - 1][j];
} else {
grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1]);
}
}
}
return grid[m - 1][n - 1];
}
}