【leetcode刷题】62 63 64 unique path & unique path II & minimum path sum

原题链接
https://leetcode.com/problems/unique-paths/
https://leetcode.com/problems/unique-paths-ii/
https://leetcode.com/problems/minimum-path-sum/
解题思路
这三道题比较类似,都是利用动态规划。
其中,unique path只需要把走到每一个格子里的方法数目加和即可;

unique path II 是一个简单变体,把obstaclegrid中为1的格子的方法数设置为0,再按照同上方法加和;
unique pathunique path II
minimum path sum取上面和左边格子中的较小值与给定格子中的加数相加得到当前的最小和。

minimum path sum代码
unique path

class Solution():
    def uniquePaths(self, m, n):
        methods = [[1 for i in range(n)] for i in range(m)]
        for right in range(1, m):
            for down in range(1, n):
                methods[right][down] = methods[right-1][down] + methods[right][down-1]
        return methods[m-1][n-1]
        

unique path II

class Solution(object):
    def uniquePathsWithObstacles(self, obstacleGrid):
        """
        :type obstacleGrid: List[List[int]]
        :rtype: int
        """
        num_row = len(obstacleGrid) + 1
        num_col = len(obstacleGrid[0]) + 1

        expand_grid = [[0 for i in range(num_col)] for i in range(num_row)]

        for row in range(1, num_row):
            for col in range(1, num_col):
                if obstacleGrid[row-1][col-1]==1:
                    expand_grid[row][col] = 0
                elif row==1 and col==1:
                    expand_grid[row][col] = 1
                else:
                    expand_grid[row][col] = expand_grid[row][col-1] + expand_grid[row-1][col]
        return expand_grid[num_row-1][num_col-1]

minimum path sum

class Solution(object):
    def minPathSum(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        num_row = len(grid) + 1
        num_col = len(grid[0]) + 1
        sum_grid = [[0 for i in range(num_col)] for i in range(num_row)]
        for row in range(1, num_row):
            for col in range(1, num_col):
                if row==1:
                    sum_grid[row][col] = sum_grid[row][col-1] + grid[row-1][col-1]
                elif col==1:
                    sum_grid[row][col] = sum_grid[row-1][col] + grid[row-1][col-1]
                else:
                    sum_grid[row][col] = min(sum_grid[row-1][col], sum_grid[row][col-1]) + grid[row-1][col-1]
        return sum_grid[num_row-1][num_col-1]

猜你喜欢

转载自blog.csdn.net/weixin_39746008/article/details/89488894