64. Minimum Path Sum(Java)
来源:互联网 发布:淘宝客服链接 编辑:程序博客网 时间:2024/06/05 13:00
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.
1、sum[ i ] [ j ] = Math.min ( sum [ i - 1 ] [ j ] , sum [ i ] [ j - 1 ] ) + grid [ i ] [ j ]
class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; int[][] sum = new int[m][n]; sum[0][0] = grid[0][0]; for (int i = 1; i < m; i ++) { sum[i][0] = sum[i - 1][0] + grid[i][0]; } for (int j = 1; j < n; j ++) { sum[0][j] = sum[0][j - 1] + grid[0][j]; } for (int i = 1; i < m; i ++) { for (int j = 1; j < n; j ++) { sum[i][j] = Math.min(sum[i - 1][j], sum[i][j - 1]) + grid[i][j]; } } return sum[m - 1][n - 1]; }}
2、用两列存储
// sum[i][j] = Math.min(sum[i - 1][j], sum[i][j - 1]) + grid[i][j]// cur col pre col cur colclass Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; int[] cur = new int[m]; int[] pre = new int[m]; pre[0] = grid[0][0]; for (int i = 1; i < m; i ++) { pre[i] = pre[i - 1] + grid[i][0]; } for (int j = 1; j < n; j ++) { cur[0] = pre[0] + grid[0][j]; for (int i = 1; i < m; i ++) { cur[i] = Math.min(pre[i], cur[i - 1]) + grid[i][j]; } pre = cur; cur = new int[m]; } return pre[m - 1]; }}
3、用一列存储
// sum[i][j] = Math.min(sum[i - 1][j], sum[i][j - 1]) + grid[i][j]// cur[i - 1] 上一行未被替换的cur[i] class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; int[] cur = new int[m]; cur[0] = grid[0][0]; for (int i = 1; i < m; i ++) { cur[i] = cur[i - 1] + grid[i][0]; } for (int j = 1; j < n; j ++) { cur[0] += grid[0][j]; for (int i = 1; i < m; i ++) { cur[i] = Math.min(cur[i], cur[i - 1]) + grid[i][j]; } } return cur[m - 1]; }}
4、不使用额外空间存储
class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = grid[0].length; for (int i = 1; i < m; i ++) { grid[i][0] += grid[i - 1][0]; } for (int j = 1; j < n; j ++) { grid[0][j] += grid[0][j - 1]; } for (int j = 1; j < n; j ++) { for (int i = 1; i < m; i ++) { grid[i][j] = Math.min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j]; } } return grid[m - 1][n - 1]; }}
阅读全文
0 0
- 64. Minimum Path Sum(Java)
- Minimum Path Sum Java
- Minimum Path Sum java
- Minimum Path Sum (Java)
- (java)Minimum Path Sum
- (Java)LeetCode-64. Minimum Path Sum
- Leetcode 64. Minimum Path Sum (Medium) (java)
- 【leetcode】64. Minimum Path Sum【java】
- leetcode oj java 64. Minimum Path Sum
- [leetcode]64. Minimum Path Sum(Java)
- 64. Minimum Path Sum
- 64. Minimum Path Sum
- 64.Minimum Path Sum
- 64. Minimum Path Sum
- 64. Minimum Path Sum
- 64. Minimum Path Sum
- 64. Minimum Path Sum
- 64. Minimum Path Sum
- HDU
- Redis学习07——存储有序字符串集合(sorted set)
- 数据库连接池
- 工作心路历程系列2:离职大公司入职创业公司心路历程
- NodeJs随手记
- 64. Minimum Path Sum(Java)
- [AGC005D]~K Perm Counting-二分图-动态规划
- ES6——Descrotor(修饰器)
- 继承与多态
- Linux 基本操作(二)————Linux系统结构、文件管理、通配符
- 简单理解mysql主从复制
- 基于Dubbo的分布式系统架构(五):在Linux操作系统上手工部署Dubbo服务
- 关于ubuntu英文版的字体问题
- 线程池的简介和使用