63. Minimum Path Sum
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.
---
DP !!!
---
1. basic 二维数组
注意i=0, j=0,
其他min[i][j] = Math.min(min[i][j-1], min[i-1][j]) + grid[i][j];
public class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; int[][] min = new int[m][n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if(i==0 && j==0) min[i][j] = grid[i][j]; else if(j == 0) min[i][j] = min[i-1][j] + grid[i][j]; else if(i == 0) min[i][j] = min[i][j-1] + grid[i][j]; else min[i][j] = Math.min(min[i][j-1], min[i-1][j]) + grid[i][j]; } } return min[m-1][n-1]; } }
2. 不用二维数组,用一维滚动数组
public class Solution { public int minPathSum(int[][] grid) { int m = grid.length, n = grid[0].length; int[] min = new int[n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (j == 0) { min[j] += grid[i][j]; } else if (i == 0) { min[j] = grid[i][j] + min[j - 1]; } else { min[j] = grid[i][j] + Math.min(min[j], min[j - 1]); } } } return min[n - 1]; } }
浙公网安备 33010602011771号