`

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.

Solution1:

用2维DP数组,状态转移方程: f(i,j) = min(f(i-1, j),f(i, j-1)) + A[i][j]。

public int minPathSum0(int[][] grid) {
    int h = grid.length;
    int w = grid[0].length;
    int[][] f = new int[h][w];
    
    f[0][0] = grid[0][0];
    for(int i=1; i<h; i++) {
        f[i][0] = f[i-1][0]+grid[i][0];
    }
    for(int i=1; i<w; i++) {
        f[0][i] = f[0][i-1]+grid[0][i];
    }
    
    for(int i=1; i<h; i++) {
        for(int j=1; j<w; j++) {
            f[i][j] = Math.min(f[i-1][j], f[i][j-1]) + grid[i][j];
        }
    }
    
    return f[h-1][w-1];
}

 

Solution2:

用1维DP数组。f(j) = min( f(j), f(j-1) ) + A[i][j]。f(j)的值在遍历每一行时都会被更新一次。

     
  f(j)  
f(j-1) f(j)  
     

 

public int minPathSum(int[][] grid) {
    int h = grid.length;
    int w = grid[0].length;
    int[] f = new int[w];
    for(int i=1; i<w; i++) { // f[0]初始值0, 其他为INT_MAX
        f[i] = Integer.MAX_VALUE;
    }
    
    for(int i=0; i<h; i++) {
        for(int j=0; j<w; j++) {
            f[j] = Math.min(f[j], j>0?f[j-1]:Integer.MAX_VALUE) + grid[i][j];
        }
    }
    return f[w-1];
}

Reference:

http://www.cnblogs.com/TenosDoIt/p/3774804.html

分享到:
评论

相关推荐

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

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

    _leetcode-python.pdf

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

    leetcode-常见考题2.pdf

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

    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最全代码

    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题目+解析+思路+答案.pdf

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

    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 book刷题必备

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

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

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

    Leetcode:LeetCode 刷题总结

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

    LeetCode:LeetCode上一些算法的解答

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

    leetcode常见的100热点算法题

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

    Anfany#LeetCode_Python3_Solution#64 最小路径和1

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

    leetcode:leetcode练习

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

    LeetCodeTop100:LeetCode的前100个问题

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

    3、动态规划必练题(含解法).pdf

    4. **Minimum Path Sum** (最小路径和) 从左上角到右下角,每一步可以向右或向下移动,求经过的最小路径和。状态转移方程为`dp[i][j] = dp[i-1][j] + dp[i][j-1] + grid[i][j]`。 5. **Maximum Subarray** (最大子...

    基础班7、8节作业1

    5. 最小路径和:这是一个典型的二维数组动态规划问题,LeetCode的第15 minimum path sum题目。目标是从左上角到右下角找到经过的所有单元格的最小和,每次可以向右或向下移动。可以创建一个二维数组dp,dp[i][j]表示...

Global site tag (gtag.js) - Google Analytics