[LeetCode]64. Minimum Path Sum

来源:互联网 发布:乐高积木淘宝网 编辑:程序博客网 时间:2024/05/22 06:08

https://leetcode.com/problems/minimum-path-sum/

题目很简单,但是要注意沟通确定能否修改input,不要上来就最优化DP,即便是用DP上来也先是二维DP,套路你懂的。


另外行列数值如果常用的话,就在开始赋给变量减少后续代码量。




解法一:不修改初始数组+DP------O(n)空间复杂度

public class Solution {    public int minPathSum(int[][] grid) {        if (grid == null || grid.length == 0) {            return 0;        }        int row = grid.length;        int col = grid[0].length;        int[] dp = new int[row];        dp[row - 1] = grid[row - 1][col - 1];        for (int  i = row - 2; i >= 0; i--) {            dp[i] = dp[i + 1] + grid[i][col - 1];        }        for (int j = col - 2; j >= 0; j--) {            for (int i = row - 1; i >= 0; i--) {                if (i == row - 1) {                    dp[i] = dp[i] + grid[i][j];                } else {                    dp[i] = Math.min(dp[i], dp[i + 1]) + grid[i][j];                }            }        }        return dp[0];    }}


解法二:修改初始数组------O(1)空间复杂度

public class Solution {    public int minPathSum(int[][] grid) {        if (grid == null || grid.length == 0) {            return 0;        }        int row = grid.length;        int col = grid[0].length;        for (int i = row - 2; i >= 0; i--) {            grid[i][col - 1] += grid[i + 1][col - 1];        }        for (int i = col - 2; i >= 0; i--) {            grid[row - 1][i] += grid[row - 1][i + 1];        }        for (int i = row - 2; i >= 0; i--) {            for (int j = col - 2; j >= 0; j--) {                grid[i][j] += Math.min(grid[i + 1][j], grid[i][j + 1]);            }        }        return grid[0][0];    }}


0 0