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];
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容