算法练习-动态规划-最小路径

最小路径和

题目

给定一个包含非负整数的 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

思路

动态规划问题
当前这一步最小值等于这一步上或左的较小值加上当前这一步的值
即max(dp[i-1][j]+dp[i][j-1])+grid[i][j]

思路


class Solution {
    public int minPathSum(int[][] grid) {
        int y=grid.length;
        int x=grid[0].length;
        int [][] dp=new int[y+1][x+1];
        for(int i=0;i<y;i++){
            for(int j=0;j<x;j++){
                if(i==0&&j==0){
                    dp[i][j]=grid[i][j];
                }
                else if (i==0&&j>0){
                    dp[i][j]=dp[i][j-1]+grid[i][j];
                }
                else if(i>0&&j==0){
                    dp[i][j]=dp[i-1][j]+grid[i][j];
                }
                else {
                    dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];
                }
            }
        }
        return dp[y-1][x-1];
    }
}
posted @ 2021-04-08 10:59  silence_bug  阅读(100)  评论(0)    收藏  举报