標籤:style blog http color io 使用 ar div 問題
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.Note: You can only move either down or right at any point in time.
與Unique Path問題相似,是一個DP問題,問題的解決方案依然是建造一個新矩陣,每個元素值是從top left到該點的最短距離。遞迴式可以根據這個寫出來,並且一旦計算出了到該點的最短距離,就把它存起來以備其他點使用。
1 public class Solution { 2 public int minPathSum(int[][] grid) { 3 int m = grid.length; 4 int n = grid[0].length; 5 if (m == 0 || n == 0) return 0; 6 int[][] matrix = new int[m][n]; 7 return FindMinPath(m-1, n-1, grid, matrix); 8 } 9 10 public int FindMinPath(int i, int j, int[][]grid, int[][]matrix) {11 if (matrix[i][j] != 0) return matrix[i][j];12 if (i == 0 && j == 0) {13 matrix[i][j] = grid[0][0];14 return matrix[i][j];15 }16 if (i == 0 && j != 0) {17 matrix[i][j] = FindMinPath(i, j-1, grid, matrix) + grid[i][j];18 return matrix[i][j];19 }20 if (i != 0 && j == 0) {21 matrix[i][j] = FindMinPath(i-1, j, grid, matrix) + grid[i][j];22 return matrix[i][j];23 }24 else {25 matrix[i][j] = Math.min(FindMinPath(i, j-1, grid, matrix), FindMinPath(i-1, j, grid, matrix)) + grid[i][j];26 return matrix[i][j];27 }28 }29 }
Leetcode: Minimum Path Sum