Leetcode 第64题:Minimum Path Sum--最小路径之和(C++、Python、JAVA)

题目地址:Minimum Path Sum


题目简介:

给定一个包含非负整数的m\times n网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

Example:

Input:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.

题目解析:

1、动态规划:

最终的目标的路径的上一步只能是它的正上或者左边,只要将初始位置到这两个位置的距离再加上目标位置的值,对比哪个小,就可以得到了结果,即dp[m][n] = min(dp[m - 1][n] + grid[m][n], dp[m][n - 1] + grid[m][n])

C++版:

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        if (grid.size() == 0)
            return 0;
        int n = grid[0].size(), m = grid.size();
        //边界点先处理
        for (int i = 1; i < m; ++i){
            grid[i][0] += grid[i - 1][0];
        }
        for (int j = 1; j < n; ++j){
            grid[0][j] += grid[0][j - 1];
        }
        for (int i = 1; i < m; ++i) {
            for (int j = 1; j < n; ++j) {
                grid[i][j] = min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j]);
            }
        }
        return grid[m - 1][n - 1];
    }
};

Java版:

class Solution {
    public int minPathSum(int[][] grid) {
        int n = grid[0].length, m = grid.length;
        for (int i = 1; i < m; i++)
            grid[i][0] += grid[i - 1][0];
        for (int j = 1; j < n; j++)
            grid[0][j] += grid[0][j - 1];
        for (int i = 1; i < m; ++i) {
            for (int j = 1; j < n; ++j) {
                grid[i][j] = Math.min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j]);
            }
        }
        return grid[m - 1][n - 1];
    }
}

Python版:

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        n = len(grid[0])
        m = len(grid)
        for i in range(1, m):
            grid[i][0] += grid[i - 1][0]
        for j in range(1, n):
            grid[0][j] += grid[0][j - 1]
        
        for i in range(1, m):
            for j in range(1, n):
                grid[i][j] = min(grid[i - 1][j] + grid[i][j], grid[i][j - 1] + grid[i][j])
        return grid[m - 1][n - 1]

猜你喜欢

转载自blog.csdn.net/chao_shine/article/details/89295778