算法训练:Minimum Path Sum
来源:互联网 发布:pdf合并拆分的软件 编辑:程序博客网 时间:2024/06/07 01:06
题目链接:https://leetcode.com/problems/minimum-path-sum/#/description
题目描述:
给定一个全为正整数的 m X n 的矩阵, 取一条从左上为起点, 走到右下为终点的路径,求一条所经过元素和最小的一条路径(前进方向只能向下或者向右)。
解题思路:
递归:
从最后右下点(终点)开始递归求解。缺点:会重复计算。
//递归实现 int minpath(int i,int j,vector<vector<int>>grid){ if( i==0 && j==0) return grid[0][0]; //注意边界情况 if(i==0) return minpath(0,j-1,grid)+grid[i][j]; if(j==0) return minpath(i-1,0,grid)+grid[i][j]; return min(minpath(i-1,j,grid),minpath(i,j-1,grid))+grid[i][j];//从右下角点向前递归 } int minPathSum(vector<vector<int>>& grid) { int row=grid.size(); int col=grid[0].size(); return minpath(row-1,col-1,grid); }
动态规划:
sum[i][j]:从第一个数grid[0][0]到grid[i][j]的最小路径和。(状态)
边界情况:第一列:sum[i][0]=sum[i-1][0]+grid[i][0]; 第一行:sum[0][j]=sum[0][j-1]+grid[0][j];
递推公式(最优解结构):sum[i][j]=min(sum[i-1][j],sum[i][j-1])+grid[i][j];
//动态规划 int minPathSum(vector<vector<int>>& grid) { int row=grid.size(); int col=grid[0].size(); vector<vector<int>>sum(row,vector<int>(col,0));//初始化 //边界情况 sum[0][0]=grid[0][0]; for(int i=1;i<row;i++){ sum[i][0]=sum[i-1][0]+grid[i][0]; } for(int j=1;j<col;j++){ sum[0][j]=sum[0][j-1]+grid[0][j]; } for(int i=1;i<row;i++){ for(int j=1;j<col;j++){ sum[i][j]=min(sum[i-1][j],sum[i][j-1])+grid[i][j]; } } return sum[row-1][col-1]; }
运行结果:
Your Input
[[0,1,2],[2,1,4],[1,5,6]]
Your answer
12
Expected answer
12
0 0
- 算法训练:Minimum Path Sum
- 算法训练:Path Sum II
- 算法训练:Binary Tree Maximum Path Sum
- LeetCode: Minimum Path Sum
- LeetCode Minimum Path Sum
- LeetCode : Minimum Path Sum
- [Leetcode] Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- [LeetCode] Minimum Path Sum
- [Leetcode] Minimum Path Sum
- Minimum Path Sum
- [LeetCode]Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- [leetcode]Minimum Path Sum
- Spring@Autowired注解与自动装配
- mysql存储过程
- Deque与LinkedBlockingDeque深入分析
- 和枚举类相关的Map类——EnumMap
- 数据结构(16)——邻接表存储练习
- 算法训练:Minimum Path Sum
- 操作系统的工具类Collections
- eclipse 可以自动进行代码块的括号匹配【看括号的背景阴影】;双击括号,括号间的内容会被着色,进而凸显。
- 慎用“古老”接口Enumeration
- UML(统一建模语言)入门级介绍
- linux自动化编译之maven搭建
- 最常用的UML静态图
- VirtualBox虚拟机报错 -Unable to boot – please use a kernel appropriate for your CPU
- Nginx深入详解之多进程网络模型