`
frank-liu
  • 浏览: 1682156 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

leetcode: 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.

原问题链接:https://leetcode.com/problems/minimum-path-sum/

 

问题分析

  这个问题其实和前面分析unique path的思路基本上一致。我们要求从最左上节点到最右下节点之间的最短距离,而且每次移动只能选择向下或者向右。那么对于初始节点来说,它的最短路径就取决于它的下面那个节点和右边那个节点哪个更小。而要求出它下面的节点和右边的节点的值,则需要进一步看这两个节点的下面和右边的元素。因此,这就构成了一个递推的关系。

  再加上前面的一个基础条件,当处在最下面一行和最右边一列的元素,它们的路径是唯一的,所以它们到终点的距离就是它当前的值和到终点元素的和。而对于其他节点的元素,它的最短路径则符合如下的规律:

  path[i][j] = path[i][j] + Math.min(path[i + 1][j], path[i][j + 1]);

  在具体的实现里,我们可以利用原有的矩阵,而不用去额外声明一个矩阵。这样可以偷点懒。

  详细的实现如下:

 

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

 

1
2
分享到:
评论

相关推荐

    javalruleetcode-LeetCode::lollipop:个人LeetCode习题解答仓库-多语言

    java lru leetcode :ice_cream: LeetCode Kindem 的个人 LeetCode 题解仓库,欢迎交流学习。 下面的目录中 $number 题号代表经典 LeetCode 题目,$number.$number ...LeetCode ...Sum ...Sum ...Sum ...Minimum Path Sum 73

    leetcode分类-LeetCode:力码

    Minimum Path Sum Unique Paths Unique Paths II Longest Palindromic Substring Interleaving String Triangle Distinct Subsequences Decode Ways Palindrome Partitioning II Maximal Rectangle ###Recursion N-...

    leetcode:leetcode练习

    - 图的遍历和最短路径问题如“最短路径问题”(Shortest Path in Graph)和“最小生成树”(Minimum Spanning Tree),常常涉及到深度优先搜索(DFS)和广度优先搜索(BFS)。C++的邻接矩阵或邻接表可以表示图结构...

    gasstationleetcode-leetcode:LeetcodeOJ解决方案

    leetcode 【演示记录】 报告 展示 2017/03/06 1.二和,167.二和二 2107/03/06 15.3 总和,16.3 总和最近,18.4 总和,11.最多水的容器 2017/03/09 62.Unique Paths, 63.Unique Paths II, 64.Minimum Path Sum 2017/...

    LeetCode:LeetCode上一些算法的解答

    9. **图算法**:图问题如"最短路径"(Shortest Path)和"最小生成树"(Minimum Spanning Tree),通常涉及深度优先搜索(DFS)或广度优先搜索(BFS)。 这个"LeetCode-master"压缩包很可能是包含了针对以上各种问题...

    js-leetcode题解之64-minimum-path-sum.js

    javascript js_leetcode题解之64-minimum-path-sum.js

    Leetcode:LeetCode 刷题总结

    7. **图论**:图论问题涉及节点和边的连接,如"最短路径"(Shortest Path)或"最小生成树"(Minimum Spanning Tree)。 8. **排序与查找**:快速排序、归并排序、二分查找等经典算法在LeetCode中也有体现,例如"三...

    leetcode:我对Leetcode问题的解决方案的集合

    6. **二叉树**:二叉树问题包括前序、中序、后序遍历、平衡二叉树等,如"二叉搜索树的最小绝对差"(Minimum Absolute Difference in BST),要求找到二叉搜索树中相邻节点的最大差值。 7. **图**:图的问题如"最短...

    LeetCode最全代码

    371 | [Sum of Two Integers](https://leetcode.com/problems/sum-of-two-integers/) | [C++](./C++/sum-of-two-integers.cpp) [Python](./Python/sum-of-two-integers.py) | _O(1)_ | _O(1)_ | Easy | LintCode | ...

    Leetcode book刷题必备

    31. Binary Tree Maximum Path Sum:二叉树中的最大路径和。 32. Binary Tree Upside Down:将一个二叉树进行翻转。 【位操作】 33. Single Number:找出数组中唯一不出现一次的数字。 34. Single Number II:找出...

    Leetcode题目+解析+思路+答案.pdf

    - **Path Sum II**:寻找所有从根节点到叶节点的路径,其路径和等于给定的目标值。 - **Flatten Binary Tree to Linked List**:将二叉树展平为单链表。 - **Validate Binary Search Tree**:验证一个二叉树是否...

    _leetcode-python.pdf

    - Minimum Path Sum: 在一个m×n的网格中,找到从左上角到右下角的路径,使得路径上的数字总和最小。 - Plus One: 给定一个由整数组成的非空数组,表示一个非负整数,将这个整数加一。 - Add Binary: 给定两个二进制...

    leetcode-常见考题2.pdf

    - 在 JumpGame 和 MinimumPathSum 题目中,动态规划用于找出跳跃游戏或路径选择中达到最优解的策略。 4. **堆栈**: - 堆栈数据结构可以用于处理与括号匹配、表达式求值等相关的题目。 - 在 ...

    leetcode常见的100热点算法题

    8. **栈与队列**:"Valid Parentheses"(有效括号)和"Minimum Size Subarray Sum"(最小覆盖子数组)这类题目会用到栈和队列的特性来处理问题。 9. **位操作**:位操作是计算机科学的基础,题目如"Number of 1 ...

    LeetCodeTop100:LeetCode的前100个问题

    - **数组**:数组是最基本的数据结构,LeetCode中的数组问题涉及排序、查找、子数组等,如"两数之和"(Two Sum)。 - **链表**:链表操作问题,如"反转链表"(Reverse Linked List)和"合并两个有序链表"(Merge ...

    Anfany#LeetCode_Python3_Solution#64 最小路径和1

    二、Python3程序64_Minimum_Path_Sum 最小路径和# 利用动态规划的方法# 要到达索引为[r,l]的网格# 一是从[r,l-1]的网格向右

    javascript-leetcode面试题解动态规划问题之第931题下降路径最小和-题解.zip

    本题解关注的是第931题,即“下降路径最小和”(Minimum Falling Path Sum),这是一个典型的动态规划问题,对求职面试中的算法能力考察具有重要意义。 动态规划是一种解决复杂问题的有效方法,它通过将大问题分解...

    常见算法题答案及解析

    31. Binary Tree Maximum Path Sum:二叉树中的最大路径和。 32. Binary Tree Upside Down:将二叉树进行上下翻转。 五、位运算 33. Single Number:只出现一次的数字,要求不使用额外空间。 34. Single Number II...

Global site tag (gtag.js) - Google Analytics