64. 最小路径和
题目:
给定一个包含非负整数的 m x n
网格 grid
,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→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] <= 100
代码:
1 class Solution { 2 public int minPathSum(int[][] grid) { 3 if(grid.length==0||grid[0].length==0){return 0;} 4 int m=grid.length; 5 int n=grid[0].length; 6 int[][] arr=new int[m][n]; 7 arr[0][0]=grid[0][0]; 8 for(int i=1;i<m;++i){arr[i][0]=arr[i-1][0]+grid[i][0];} 9 for(int i=1;i<n;++i){arr[0][i]=arr[0][i-1]+grid[0][i];} 10 11 for(int i=1;i<m;++i){ 12 for(int j=1;j<n;++j){ 13 arr[i][j]=Math.min(arr[i-1][j],arr[i][j-1])+grid[i][j]; 14 } 15 } 16 return arr[m-1][n-1]; 17 } 18 }