美文网首页
64. 最小路径和

64. 最小路径和

作者: bangbang2 | 来源:发表于2020-07-09 14:32 被阅读0次
    image.png

    解题思路

    思路:
    从右下往左上找,用dp数组来保存右下元素到括号指定点的距离
    遍历整个矩阵,分四种情况:
    1:仅仅代表最后一个元素
    2:最后一行,但不是最后一列,图中的2到4
    3:最后一列,但不是最后一行,图第三行的1到第二行的1
    4:不是边界,比如5到1

    代码

    class Solution {
        public int minPathSum(int[][] grid) {
        int  [][] dp=new int[grid.length][grid[0].length];//dp数组来保存右下元素到括号指定点的距离
        //在二维数组中,grid.length代表有多少行,指里边的中括号
        //grid[0].length指第一行的元素个数,那不就是几列吗
        for(int i=grid.length-1;i>=0;i--){//是从右下到左上,反方向
            for(int j=grid[0].length-1;j>=0;j--){
               if(i==grid.length-1&&j==grid[0].length-1)
                    dp[i][j]=grid[i][j];//仅仅代表最后一个元素
               if(i==grid.length-1&&j!=grid[0].length-1) //最后一行,但不是最后一列,图中的2到4
                     dp[i][j]=dp[i][j+1]+grid[i][j];//只能向右走
               if(i!=grid.length-1&&j==grid[0].length-1)//最后一列,但不是最后一行,图第三行的1到第二行的1
                     dp[i][j]=dp[i+1][j]+grid[i][j];//只能向下走
                if(i!=grid.length-1&&j!=grid[0].length-1)//不是边界,比如5到1
                     dp[i][j]=Math.min(dp[i][j+1]+grid[i][j],dp[i+1][j]+grid[i][j]);//有两个方向,选一个最小的
                    
            }
        }
           return dp[0][0];
         }
    }
    

    相关文章

      网友评论

          本文标题:64. 最小路径和

          本文链接:https://www.haomeiwen.com/subject/wstscktx.html