zoukankan      html  css  js  c++  java
  • 【LeetCode练习题】Minimum Path Sum

    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问题,给定一个m*n的二维数组,每一个值都是非负数。问从起点(左上角)到终点(右下角)的一条路径上所有的数加起来的和最小是多少?

    解题思路:

    参考  Unique Path Two题目的解法  在那个基础上:

    以中间的某一个点A来考虑,A左边是B,A上边是C,假设B和C的结果已经求出来了,那么A的结果应该等于B和C中结果较小的那个加上A位置的给定值。

    特殊的是:

    第一行中,除第一个点的所有的点的结果等于前一个点的结果加上本身的给定值。

    第一列中,除第一个点的所有的点的结果等于上一个点的结果加上本身的给定值。

    (描述起来好绕口的说…………)

    画图来理解:

    代码如下:

    空间复杂度:O(n)

    class Solution {
    public:
        int minPathSum(vector<vector<int> > &grid) {
            int m = grid.size();
            int n = grid[0].size();
            vector<int> dp(n,0);
            for(int i = 0; i < m;i++){
                for(int j = 0; j < n; j++){
                    if(j == 0){
                        dp[j] = dp[j] + grid[i][j];
                    }
                    else if(i == 0){
                        dp[j] = dp[j-1] + grid[i][j];
                    }
                    else{
                        dp[j] = min(dp[j-1],dp[j]) + grid[i][j];
                    }
                }
            }
            return dp.back();
        }
    };

    上面的比较容易理解,下面的代码其实是一个道理:

    class Solution {
    public:
        int minPathSum(vector<vector<int> > &grid) {
            int m = grid.size();
            int n = grid[0].size();
            vector<int> dp(n+1,INT_MAX);
            dp[1] = 0;
            for(int i = 0; i < m; i++){
                for(int j = 0; j < n; j++){
                    dp[j+1] = min(dp[j],dp[j+1]) + grid[i][j];
                }
            }
            return dp.back();
        }
    };
  • 相关阅读:
    Practice II 字符串
    Euleriar Path 入门
    2-SAT 入门
    Practice I 图论
    游戏中寻找学习JAVA的乐趣之坦克大战系列5-坦克的动态参数
    JQuery教程:实现轮播图效果
    HTML表格应用
    菜鸟Vue学习笔记(三)
    Java成神路上之设计模式系列教程之一
    JVM垃圾回收机制之对象回收算法
  • 原文地址:https://www.cnblogs.com/4everlove/p/3660762.html
Copyright © 2011-2022 走看看