ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动态规划(2)

2020-04-02 09:07:55  阅读:169  来源: 互联网

标签:min int len range grid 动态 规划 dp


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

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-path-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution:
    def minPathSum(self, grid: [[int]]) -> int:
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if i == j == 0: continue
                elif i == 0:  grid[i][j] = grid[i][j - 1] + grid[i][j]
                elif j == 0:  grid[i][j] = grid[i - 1][j] + grid[i][j]
                else: grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j]
        return grid[-1][-1]
View Code
class Solution(object):
    def minPathSum(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """

        # 非优化动态规划,时间复杂度O(m*n),空间复杂度O(n*m)
        m = len(grid)
        n = len(grid[0])
        for i in range(1,n):
            grid[0][i] += grid[0][i-1]
        for j in range(1,m):
            grid[j][0] += grid[j-1][0]
        for i in range(1,m):
            for j in range(1,n):
                grid[i][j] = min(grid[i-1][j],grid[i][j-1]) + grid[i][j]
        return grid[-1][-1]
        

        # 优化算法,即求每次到达位置的最优解
        # 定义状态:即定义数组元素的含义,dp[i]表示当前位置的最小数值综合
        # 建立状态转移方程:dp[i] = min(dp[i-1],dp[i])+grid[i,j]
        # 设定初始值:这一步是关键
        # 选择结果,即dp[-1]
        m = len(grid)
        n = len(grid[0])
        dp = [0]*n
        dp[0] = grid[0][0]
        for k in range(1,n):
            dp[k] = dp[k-1] + grid[0][k] 
        for i in range(1,m):
            for j in range(0,n):
                if j == 0 : dp[j] += grid[i][j]
                else:
                    dp[j] = min(dp[j-1],dp[j])+grid[i][j]
        return dp[-1]

作者:yu-fa-tang-you-dian-tian
链接:https://leetcode-cn.com/problems/minimum-path-sum/solution/python-dong-tai-gui-hua-you-hua-kong-jian-fu-za-du/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code

 

标签:min,int,len,range,grid,动态,规划,dp
来源: https://www.cnblogs.com/topass123/p/12617408.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有