LeetCode解题 64:Minimum Path Sum
Problem 64: Minimum Path Sum [Medium]
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.
Example:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.
来源:LeetCode
解题思路
动态规划题,解题思路与Problem 62 Unique Paths类似。
状态方程:
s
u
m
[
i
,
j
]
=
min
{
s
u
m
[
i
,
j
−
1
]
,
s
u
m
[
i
−
1
,
j
]
}
+
g
r
i
d
[
i
,
j
]
sum[i, j] = \min\{sum[i, j-1], sum[i-1, j]\} + grid[i, j]
sum[i,j]=min{sum[i,j−1],sum[i−1,j]}+grid[i,j]
每一格可以通过左边格/上边格到达,因此取左边一格与上边一格的数字和中的较小值,再加上当前格的值grid[i, j],即为到达当前格的最小数字和。
具体思路:
- 由Unique Paths题解可知,实现该状态方程只需要创建一个长度为n的一维数组:sum[n]。
- 初始化:sum[0] = 0,sum[1~n-1] = MAX_VALUE.
- 双重循环:
a. 第一重循环:计算每行首列的值,即sum[0]。由于第一列只能由上边一格到达,因此不需要比较出最小值,只需要叠加上边格的值,更新公式为:sum[0] = sum[0] + grid[i, 0]。
b. 第二重循环:计算每行当前格方法个数公式:sum[j] = min(sum[j-1], sum[j]) + grid[i, j]。
整个算法时间复杂度为 O ( m ∗ n ) O(m*n) O(m∗n),空间复杂度为 O ( n ) O(n) O(n)。
运行结果:

Solution (Java)
class Solution {
public int minPathSum(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
int[] sum = new int[n];
Arrays.fill(sum, Integer.MAX_VALUE);
sum[0] = 0;
for(int i = 0; i < m; i++){
sum[0] += grid[i][0];
for(int j = 1; j < n; j++){
sum[j] = Math.min(sum[j-1], sum[j]) + grid[i][j];
}
}
return sum[n-1];
}
}
本篇博客介绍了LeetCode第64题的解决方案,即找到一个非负数网格从左上角到右下角的最小路径和。通过动态规划的方法,利用状态方程`sum[i,j]=min{sum[i,j−1],sum[i−1,j]}+grid[i,j]`来求解。博主提供了详细的解题思路和Java代码实现,算法的时间复杂度为O(m*n),空间复杂度为O(n)。"
123188394,10969852,Apache ShardingSphere SQL Parse Format 深度解析,"['数据库', 'SQL', 'Apache', 'ShardingSphere', '中间件']
324

被折叠的 条评论
为什么被折叠?



