矩阵的最小路径和(Java)
题目:
给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后达到右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。
举例:
给定的m如下:
1 3 5 9
8 1 3 4
5 0 6 1
8 8 4 0
路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12。
代码实现:
方法一:
/*** 借助m*n的辅助空间来解决问题* @param nums* @return*/
public static int getMinPathSum1(int nums[][]){if(nums == null || nums.length == 0 || nums[0] == null || nums[0].length == 0){return 0;}int row = nums.length;int col = nums[0].length;int [][]dp = new int[row][col];dp[0][0] = nums[0][0];for(int i = 1; i < row; i++){dp[i][0] = dp[i-1][0] + nums[i][0];}for(int j = 1; j < col; j++){dp[0][j] = dp[0][j-1] + nums[0][j];}for(int i = 1; i < row; i++){for(int j = 1; j < col; j++){dp[i][j] = Math.min(dp[i][j-1], dp[i-1][j]) + nums[i][j];}}return dp[row-1][col-1];
}
方法二:
/*** 借助于m*1或者1*n的辅助空间* @return*/
public static int getMinPathSum2(int nums[][]){if(nums == null || nums.length == 0 || nums[0] == null || nums[0].length == 0){return 0;}int more = Math.max(nums.length, nums[0].length); //得到行与列的较大值为moreint less = Math.min(nums.length, nums[0].length); //得到行与列的较小值为lessboolean rowmore = more == nums.length; //行数是不是大于列数int arr[] = new int[less]; //辅助空间仅为行或者列的最小值arr[0] = nums[0][0];for(int i = 1; i < less; i++){arr[i] = arr[i-1] + (rowmore ? nums[0][i] : nums[i][0]); }for(int i = 1; i < more; i++){arr[0] = arr[0] + (rowmore ? nums[i][0] : nums[0][i]);for(int j = 1; i < less; j++){arr[j] = Math.min(arr[j-1], arr[j]) + (rowmore ? nums[i][j]:nums[j][i]);}}return arr[less-1];
}
矩阵的最小路径和(Java)相关推荐
- 《LeetCode力扣练习》第64题 最小路径和 Java
<LeetCode力扣练习>第64题 最小路径和 Java 一.资源 题目: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为 ...
- 牛客题霸 [矩阵的最小路径和] C++题解/答案
牛客题霸 [矩阵的最小路径和] C++题解/答案. 题目描述 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的 ...
- 矩阵的最小路径和——动态规划
题目描述: 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和. 示例: [[1,3,5,9] ...
- 【剑指offer】面试题12:矩阵中的路径(Java)
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径不能再 ...
- 【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java、dfs)
文章目录 题目描述 思路 & 代码 更新版 2.0 题目描述 一眼dfs,走四个方向即可 思路 & 代码 class Solution {boolean[][] visited;boo ...
- 动态规划示例汇总-Java版(组合硬币、跳台阶、最小路径和、最长递增子序列、最长公共子序列、01背包问题、最小编辑代价)
动态规划算法示例汇总-Java版 组合硬币 Java解题-暴力搜索 Java解题-记忆搜索 Java解题-动态规划(两种写法) 跳台阶 Java解题-暴力递归 Java解题-动态规划 矩阵最小路径和 ...
- Java 练习 1.三角形最小路径和 2.外出采摘的日本人 3.最大矩形
三角形最小路径和 给定一个三角形 triangle ,找出自顶向下的最小路径和. 每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 ...
- 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)
1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...
- leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)
题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...
最新文章
- 百度开设「黄埔学院」,革新者来
- 第三代DNA测序及其相关生物信息学技术发展概况
- 基于2-channel network的图片相似度判别
- android蓝牙音乐之AVRCP介绍和使用
- 【Google Play】IARC 年龄分级 ( IARC 国际年龄分级联盟 | Google Play 设置应用年龄分级 )
- Intellij idea workflow 工作流插件安装
- IdentityServer4(7)- 使用客户端认证控制API访问(客户端授权模式)
- nginx系列之六:cache服务
- python--循环列表中字典元素
- python迭代函数例题_python map 函数使用,遍历访问可迭代对象
- CentOS7安装Gnome GUI图形界面
- 《C语言编程初学者指南》一导读
- 给大家讲讲在哪些地方发外链最好
- 【系统分析与设计】高校学生社团管理系统
- [Protues]protues8使用示波器制作李沙育图形
- 简单的Python爬虫刷访问量程序
- Lexicon Enhanced Chinese Sequence Labelling Using BERT Adapter 论文解读
- 科学网肖波:海外博后申请的一点经验与看法
- 微软雅黑与微软正黑体
- Android硬件开发------计步传感器
热门文章
- 水溶的球形金纳米颗粒浓度1mg/ml|纳米金粒径13nm|Ag@SiO2核壳纳米粒子内核15nm外核5nm
- 高阶函数和回调函数的区别
- golang 记一次data race排查过程
- 上海自考计算机本科考哪些专业吗,上海自考本科有哪些专业
- SpringApplication.run(MyApplication.class, args)运行流程源码分析
- 【最新】智慧图书馆管理软件应该全面考量各个模块的建设
- ADI官网资料检索技巧
- Qno侠诺中小型企业ERP远程接入方案(转)
- 30个顶级Python库 | 用于深度学习、自然语言处理和计算机视觉
- C++ 算法设计与分析 地图着色问题(中国+美国)