美文网首页
Leetcode-64Minimum Path Sum

Leetcode-64Minimum Path Sum

作者: LdpcII | 来源:发表于2018-04-18 21:42 被阅读0次

64. 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.

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.

My Solution(C/C++)

#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Solution {
public:
    int minPathSum(vector<vector<int>> &grid) {
        vector<vector<int>> dp(grid.size(), vector<int>());
        dp[0].push_back(grid[0][0]);
        for (int row = 0; row < grid.size(); row++) {
            for (int column = 0; column < grid[row].size(); column++) {
                if (row == 0 && column != 0) {
                    dp[row].push_back(dp[row][column - 1] + grid[row][column]);
                }
                else if (row != 0 && column == 0) {
                    dp[row].push_back(dp[row - 1][column] + grid[row][column]);
                }
                else if(row != 0 && column != 0){
                    dp[row].push_back(min(dp[row][column - 1], dp[row - 1][column]) + grid[row][column]);
                }
            }
        }
        return dp[grid.size() - 1][grid[grid.size() - 1].size() - 1];
    }
};

int main() {
    vector<vector<int>> grid(3, vector<int>());
    grid[0].push_back(1);
    grid[0].push_back(3);
    grid[0].push_back(1);
    grid[1].push_back(1);
    grid[1].push_back(5);
    grid[1].push_back(1);
    grid[2].push_back(4);
    grid[2].push_back(2);
    grid[2].push_back(1);
    Solution s;
    printf("矩形最小路径和:%d", s.minPathSum(grid));
    return 0;
}

结果

矩形最小路径和:7

My Solution(Python)

class Solution:
    def minPathSum(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        if grid == []:
            return 0
        row = len(grid)
        column = len(grid[0])
        dp = [[-1 for i in range(column)] for j in range(row)]
        dp[0][0] = grid[0][0]
        for i in range(1, row):
            dp[i][0] = dp[i-1][0] + grid[i][0]
        for j in range(1, column):
            dp[0][j] = dp[0][j-1] + grid[0][j]
        for i in range(1, row):
            for j in range(1, column):
                    dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
        return dp[-1][-1]

相关文章

网友评论

      本文标题:Leetcode-64Minimum Path Sum

      本文链接:https://www.haomeiwen.com/subject/gzwbkftx.html