最小路径和

83 阅读1分钟

题目

动态规划

public class Main {
    public static void main(String[] args) {

        Main main = new Main();
        int [][] nums = new int[][] {{1, 3, 1}, {1, 5, 1}, {4, 2, 1}};
        main.minPathSum(nums);
    }

    public int minPathSum(int[][] grid) {
        // 每个位置的最小路径和只会由左边的格子向右, 或者上边的格子向下得到
        int [][] dp = new int[grid.length][grid[0].length];

        for (int i = 0; i < grid.length; i ++) {
            for (int j = 0; j < grid[i].length; j ++) {
                if (i == 0 && j == 0) {
                    dp[i][j] = grid[i][j];
                } else {
                    int upValue = (i - 1) < 0 ? Integer.MAX_VALUE : dp[i - 1][j];
                    int leftValue = (j - 1) < 0 ? Integer.MAX_VALUE : dp[i][j - 1];
                    dp[i][j] = grid[i][j] + Math.min(upValue, leftValue);
                }

            }
        }
        return dp[grid.length - 1][grid[0].length - 1];
    }
}

基本思路

  1. 每个位置的最小路径和只会由左边的格子向右, 或者上边的格子向下得到

  2. 注意边界条件