leetcode题目64. 最小路径和

题目描述

链接:https://leetcode-cn.com/problems/minimum-path-sum/
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。

代码

    public int minPathSum(int[][] grid) {
        // f(m, n) = grid[m - 1][n - 1] + min(f(m - 1, n) , f(m, n-1))

        if (grid == null || grid.length <= 0) {
            return 0;
        }

        int rowCount = grid.length;
        int columnCount = grid[0].length;
        int[] result = new int[columnCount];

        for (int row = 0; row < rowCount ; row ++) {
            for (int column = 0; column < columnCount; column ++) {
                if (row == 0 && column == 0) {
                    result[column] = grid[row][column];
                    continue;
                }
                if (column == 0) {
                    result[column] = grid[row][column] + result[column];
                    continue;
                }
                if (row == 0) {
                    result[column] = grid[row][column] + result[column - 1];
                    continue;
                }
                result[column] = grid[row][column] + Math.min(result[column], result[column - 1]);
            }
        }
        return result[columnCount - 1];
    }

你可能感兴趣的:(leetcode题目64. 最小路径和)