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: 用一个二维数组,map[i][j] = Math.min(map[i - 1][j] + grid[i][j], map[i][j - 1] + grid[i][j]),我们可以只用一维数组来代替。
public class Solution { //Time: O(m*n) Space: O(n) public int minPathSum(int[][] grid) { if (grid == null || grid.length == 0) { return 0; } int[] map = new int[grid[0].length]; map[0] = grid[0][0]; for (int i = 1; i < map.length; i++) { map[i] = map[i - 1] + grid[0][i]; } for (int i = 1; i < grid.length; i++) { map[0] += grid[i][0]; for (int j = 1; j < grid[0].length; j++) { map[j] = Math.min(map[j - 1] + grid[i][j], map[j] + grid[i][j]); } } return map[map.length - 1]; } }
No comments:
Post a Comment