最小路径和

  • 题目
  • 思路与算法
  • 代码实现
  • 时间复杂度分析

题目

思路与算法

  1. 这题和之前做过的不同路径Ⅰ,不同路径Ⅱ基本一致,状态方程式也基本一致,没有什么太多的思路,第一种方法就直接暴力枚举所有的节点到末尾的距离就行了。状态方程:dp[i][j] =grid[i][j] + min{dp[i+1][j],dp[i][j+1]}
  2. 第二种方法是直接计算一下每次的权值,存入对应的相同大小的数组中即可,可以从左上角开始,也可以从右下角开始算,结果不变。实际上可以不用新建数组,空间复杂度可以优化降低,但时间复杂度不变,因此不予列举,

代码实现

方法一

package com.immunize.leetcode.minPathSum;/*** 方法一: 根据动态状态方程直接写:dp[i][j] =grid[i][j] + min{dp[i+1][j],dp[i][j+1]}* * TLE* * @author Mr IMMUNIZE**/
public class Solution {// 根据动态方程,当前节点的到达路径等于其右边的点和其下边的点的路径之和// 写出从(i,j)到达右下角的路径值的计算private int calculate(int i, int j, int[][] grid) {// 特殊情况处理:边界点和终点的计算// 超出边界的处理if (i == grid.length || j == grid[0].length) {return Integer.MAX_VALUE;}// 终点的计算if (i == grid.length - 1 && j == grid[0].length - 1) {return grid[i][j];}// 状态方程return Math.min(calculate(i + 1, j, grid), calculate(i, j + 1, grid)) + grid[i][j];}public int minPathSum(int[][] grid) {return calculate(0, 0, grid);}
}

方法二

package com.immunize.leetcode.minPathSum;/*** 对方法一进行了优化,不枚举,直接计算出权重填入数组即可。* * @author Mr IMMUNIZE**/
public class Solution2 {public int minPathSum(int[][] grid) {// 初始化变量,新建权重二维数组int len1 = grid.length;int len2 = grid[0].length;int[][] weight = new int[len1][len2];// 对数组进行整体的遍历,倒序遍历,每次将权重值存入对应的位置for (int i = len1 - 1; i >= 0; i--) {for (int j = len2 - 1; j >= 0; j--) {// 如果是右下角的位置,则权重为其值if (i == len1 - 1 && j == len2 - 1) {weight[i][j] = grid[i][j];}// 最后一行的位置,权重为weight[i][j+1] + grid[i][j]if (i == len1 - 1 && j != len2 - 1) {weight[i][j] = weight[i][j + 1] + grid[i][j];}// 最后一列的位置,权重为weight[i+1][j] + grid[i][j]if (i != len1 - 1 && j == len2 - 1) {weight[i][j] = weight[i + 1][j] + grid[i][j];}// 其余位置的值,权重为Math.min(weight[i+1][j],weight[i][j+1])+grid[i][j]if (i != len1 - 1 && j != len2 - 1) {weight[i][j] = Math.min(weight[i + 1][j], weight[i][j + 1]) + grid[i][j];}}}// 遍历结束后直接返回weight[0][0]即可return weight[0][0];}
}

时间复杂度分析

方法一:(枚举法)每次有2条路可以选择,除了最后一行一列,但不影响复杂度O(2^(m+n))
方法二:需要遍历一遍数组,O(m*n)

20200225:最小路径和(leetcode64)相关推荐

  1. 最小路径和—leetcode64

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [   [1,3,1],   [1,5, ...

  2. 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)

    1. 数组去重 题目描述 /*** 有序数组去重* 输出最终的数字个数* 输入:1,2,2* 输出:2* @author Turing**/ 代码 import java.util.*; public ...

  3. LeetCode--64. 最小路径和(动态规划)

    最小路径和(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:中等 2. 题目分析 这道题目是62题.不同路径的延伸,解题思路基本一样的,是通过动态规划来实现的: - ...

  4. LeetCode-64.最小路径和

    题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 思路 设dp为大小为 m x n的 ...

  5. 【网络流24题】最小路径覆盖问题

    [题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...

  6. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

  7. 有向图最小路径覆盖方法浅析、证明 //hdu 3861

    路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii. ...

  8. HDU4160(最小路径覆盖问题)

    题意:当满足条件wi<wj,hi<hl和li<lj时,求解通过优化嵌套给定的娃娃可以获得的最外层洋娃娃的最小数量. 思路:如果嵌套的娃娃越多,则剩下的娃娃就越少,意味着单独出来的娃娃 ...

  9. poj1422(最小路径覆盖问题)

    最小路径覆盖数: 对于一个DAG(有向无环图),选取最少条路径,使得每个 顶点属于且仅属于一条路径.路径长度可以为零:(有向图中找一些路径,使之覆盖了图中的所有顶点,就是任意一个顶点都跟那些路径中的某 ...

最新文章

  1. python获取硬件信息
  2. 【Java 并发编程】线程锁机制 ( 锁的四种状态 | 无锁状态 | 偏向锁 | 轻量级锁 | 重量级锁 | 锁竞争 | 锁升级 )
  3. AB1601某些io口不支持较高频率信号的输入
  4. Maven(四):定制库到Mave本地资源库 (Kaptcha)
  5. [译]试用新的System.Text.Json API
  6. unsigned char s1 : 2的用法
  7. 英雄联盟与人生奋斗的类比讨论
  8. Oracle PGA参数
  9. 你能打动客户的C++理由,一定要先说服自己相信
  10. 过去一年顶级借贷服务商BTC总托管资产平均增长超700%
  11. win10u盘被写保护怎么解除_Win10系统下U盘写保护应该如何破除!
  12. 武汉理工大学计算机学院转专业细则,计算机学院武汉理工大学2009年各学院转专业工作实施细则.doc...
  13. ALVA Systems发布AR新品 倪光南院士致辞
  14. configure error:Package requirements (openssl) were not met
  15. Docker的中央仓库
  16. Python3实现向指定邮箱发送邮件(支持附件文件、图片等)
  17. Ubuntu 如何直接回到桌面
  18. 2023电工杯数学建模B题思路
  19. 【NS2】cygwin+NS2.29安装之道 (转载)
  20. 怎么用Python批量添加zabbix-host主机

热门文章

  1. 9 条非常强大的 JavaScript 技巧
  2. 如何从技术上“绞杀”盗链者?
  3. Venture Sprint创新冲刺:源自硅谷设计 感知创新力量
  4. AI 外挂!百度 Lens 是如何突破人眼视觉极限的?
  5. 宇宙第一 IDE Visual Studio 支持 Java 了!
  6. 量子计算是否会终结区块链?
  7. 2018 OpenInfra Days China 大咖来袭——开源,我们是认真的
  8. 和阿里同年创办,为何当当却走向了“卖身”的结局?
  9. 12306再曝漏洞,一张身份证可买两张相同火车票
  10. nasdocker推荐,附小技巧