zoukankan      html  css  js  c++  java
  • LeetCode 64. Minimum Path Sum

    题目如下:

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
    
    Note: You can only move either down or right at any point in time.

    思路:

    因为只能往右或往下走,所以可以初始化当res[m][0], res[0][n]这些边界情况

    然后,每一步结果为当前值+min(上边一步,左边一步),即res[i][j] = grid[i][j] + min(res[i-1][j], res[i][j-1])

    本体代码:

    /**
     * Created by yuanxu on 17/4/13.
     */
    public class DP64 {
    
        public static int minPathSum(int[][] grid) {
            int m = grid.length;
            int n = grid[0].length;
            int res[][] = new int[m][n];
    
            // boundary conditions
            res[0][0] = grid[0][0];
            for (int i=1; i<m; i++) {
                res[i][0] = grid[i][0] + res[i-1][0];
            }
            for (int j=1; j<n; j++) {
                res[0][j] = grid[0][j] + res[0][j-1];
            }
    
            // dp
            for (int i=1; i<m; i++) {
                for (int j=1; j<n; j++) {
                    res[i][j] = grid[i][j] + (res[i-1][j] < res[i][j-1] ? res[i-1][j] : res[i][j-1]);
                }
            }
    
            return res[m-1][n-1];
        }
    
        public  static void main(String[] args) {
            int grid[][] = {{1,2},{1,1}};
            System.out.println(minPathSum(grid));
        }
    }

    网上的解答有空间复杂度为0的:

    public class Solution {
        public int minPathSum(int[][] grid) {
            int m = grid.length;// row
            int n = grid[0].length; // column
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (i == 0 && j != 0) {
                        grid[i][j] = grid[i][j] + grid[i][j - 1];
                    } else if (i != 0 && j == 0) {
                        grid[i][j] = grid[i][j] + grid[i - 1][j];
                    } else if (i == 0 && j == 0) {
                        grid[i][j] = grid[i][j];
                    } else {
                        grid[i][j] = Math.min(grid[i][j - 1], grid[i - 1][j])
                                + grid[i][j];
                    }
                }
            }
    
            return grid[m - 1][n - 1];
        }
    }

    ref: https://discuss.leetcode.com/topic/5459/my-java-solution-using-dp-and-no-extra-space

  • 相关阅读:
    StarGAN v2
    STGAN
    Neo4j 图数据库查询
    StarGAN
    AttGAN
    分布式事务解决方案--Seata源码解析
    5分钟彻底了解Nginx的反向代理
    SpringBoot启动流程源码解析
    JAVA基础5--注解的实现原理
    Redis进阶三之底层存储数据结构及内存优化
  • 原文地址:https://www.cnblogs.com/pinganzi/p/6703286.html
Copyright © 2011-2022 走看看