zoukankan      html  css  js  c++  java
  • leetcode刷题笔记六十四 最小路径和

    leetcode刷题笔记六十四 最小路径和

    源地址:64. 最小路径和

    问题描述:

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

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

    示例:

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

    代码补充:

    /**
    与之前路径问题解决方法一致,使用动态规划解决问题
    使用滚动数组思想
    动态方程初始状态:
    dp(0) = grid(0)(0)
    第一行的初始化,dp(i) = dp(i-1) + grid(0)(i), i <- 1 to length-1
    对于第一列, dp(0) = dp(0) + grid(i)(0)
    其他(以目标点为例,其只能由左侧和上侧访问)dp(j) = math.min(dp(j), dp(j-1)) + grid(i)(j) 
    */
    object Solution {
        def minPathSum(grid: Array[Array[Int]]): Int = {
            val high = grid.length
            val length = grid(0).length 
            val dp = Array.fill(length)(0)
            
            //init dp
            
            dp(0) = grid(0)(0)
            for(i <- 1 to length-1) dp(i) = dp(i-1) + grid(0)(i)
            
            for(i <- 1 to high-1; j <- 0 to length-1){
                    if (j == 0) dp(j) = dp(j) + grid(i)(0)
                    else  dp(j) = math.min(dp(j), dp(j-1)) + grid(i)(j)
            }
        
            return dp(length-1)
        }
    }
    
  • 相关阅读:
    polya定理
    树状数组
    离散数学通路数的矩阵计算法
    高次同余方程求解
    Uva1378
    poj2888
    poj2409&&poj1286
    poj2182
    poj2154
    判断一个字符是否为汉字
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13304541.html
Copyright © 2011-2022 走看看