最小路径和
解题思路:动态规划+自底向上
在这里其实没必要做空间复杂度的处理,因为没有用多余的空间,所以完全可以用m*n的循环方式
class Solution { public int minPathSum(int[][] grid) { int xlen = grid.length; int ylen = grid[0].length; int min = Math.min(xlen,ylen); int max = Math.max(xlen,ylen); if(min==xlen){ for(int i=1;i<xlen+ylen-1;++i){ for(int j=0;j<min;++j){ if(i-j>=0&&i-j<max){ if(j==0){ grid[j][i-j] += grid[j][i-j-1]; }else if(i-j==0){ grid[j][i-j] += grid[j-1][i-j]; }else{ grid[j][i-j] += Math.min(grid[j][i-j-1],grid[j-1][i-j]); } } } } }else{ for(int i=1;i<xlen+ylen-1;++i){ for(int j=0;j<min;++j){ if(i-j>=0&&i-j<max){ if(j==0){ grid[i-j][j] += grid[i-j-1][j]; }else if(i-j==0){ grid[i-j][j] += grid[i-j][j-1]; }else{ grid[i-j][j] += Math.min(grid[i-j][j-1],grid[i-j-1][j]); } } } } } return grid[xlen-1][ylen-1]; } }