leetcode64-最小路徑和
阿新 • • 發佈:2018-12-31
題目描述:
給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例:
輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 7
解釋: 因為路徑 1→3→1→1→1 的總和最小。
解析:
動態規劃問題
對於矩陣中的任一位置,每次只能向下或者向右移動一步
- 1.[0][0]位置的路徑為自己本身
- 2.第一列的 每個位置的 路徑,等於它上面第一個數的路徑長度+自己本身
- 3.第一行的 每個位置的 路徑,等於左面第一個數的路徑長度+自己本身
- 4.除邊界外的數 路徑長度 = 自身 + min(左面第一個位置的路徑長度,上面第一個位置的路徑長度)
class Solution { public int minPathSum(int[][] grid) { int rows = grid.length; int cols = grid[0].length; int[][] weigh = new int[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if(i == 0 && j == 0){//1 weigh[i][j] = grid[i][j]; }else if(i == 0){//2 weigh[i][j] = grid[i][j] + weigh[i][j-1]; }else if(j == 0){//3 weigh[i][j] = grid[i][j] + weigh[i-1][j]; }else{//4 weigh[i][j] = grid[i][j] + Math.min(weigh[i-1][j],weigh[i][j-1]); } } } return weigh[rows-1][cols-1]; } }