minimumpath及题目说明:给定一个包含非负整数的mxngridgrid,请找出一条从左上角到右下角的路径,使得上的数字之和路径是最小的。注意:一次只能向下或向右移动一步。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:穷举法递归递归法minPathSum的参数是当前坐标和当前路径之和。递归过程如下:如果当前坐标已经到达右下角,则判断当前路径和是否小于已有的最小值,如果是,则更新最小值;如果当前坐标走到最右边,则坐标向下移动,递归处理;若当前坐标下移,则坐标右移,递归处理;如果当前坐标不在Up侧,则需要递归两次分别向下和向右移动。最后返回最小值。方案二:动态规划首先声明一个与网格大小相同的二维数组dp,用于存储到达对应单元格的累计值;初始化第一列的值;初始化第一行的值;然后遍历下面的单元格,给左边和上面较小的值赋值;最后返回dp[rows-1][columns-1]这是最小的总和。publicclassLeetCode_064{privatestaticintresult=Integer.MAX_VALUE;/***穷举方法递归**@paramgrid*@return*/publicstaticintminPathSum(int[][]grid){minPathSum(grid,0,0,0);返回结果;}privatestaticvoidminPathSum(int[][]grid,intx,inty,intsum){sum+=grid[x][y];//转到右下方的单元格网格if(x==grid.length-1&&y==grid[0].length-1){result=Math.min(sum,result);返回;}if(x==grid.length-1){//转到最后一行,向右走minPathSum(grid,x,y+1,sum);}elseif(y==grid[0].length-1){//转到最后一列,往下走minPathSum(grid,x+1,y,sum);}else{//往下走minPathSum(grid,x,y+1,sum);//向右走minPathSum(grid,x+1,y,sum);}}/***动态规划**@paramgrid*@return*/publicstaticintminPathSum2(int[][]grid){if(grid==null||grid.length==0||grid[0].length==0){返回0;}introws=grid.length,columns=grid[0].length;int[][]dp=newint[行][列];dp[0][0]=网格[0][0];/***初始化第一列值*/for(inti=1;i
