最小路径和
题目描述
原题链接:64. 最小路径和 - 力扣(LeetCode)
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
1 2 3
| 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小。
|
示例 2:
1 2
| 输入:grid = [[1,2,3],[4,5,6]] 输出:12
|
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 200
解题思路
定义集合f[i] [j]为到达(i, j )位置时的最小数字和
状态转移方程:f[i] [j] = min(f[i-1] [j], f[i] [j-1]) + gird[i-1] [j-1]
边界问题:防止不越界就可以
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Solution { public int minPathSum(int[][] grid) { for(int i = 0; i < grid.length; i++){ for(int j = 0; j < grid[i].length; j++){ if(i == 0 && j == 0)continue; if(i == 0) grid[i][j] = grid[i][j-1] + grid[i][j]; if(j == 0) grid[i][j] = grid[i-1][j] + grid[i][j]; if(i != 0 && j != 0) grid[i][j] = Math.min(grid[i-1][j], grid[i][j-1]) + grid[i][j]; } } return grid[grid.length - 1][grid[0].length - 1]; } }
|
AC记录: