赞
踩
200道大数据面试常考Leetcode算法题(动态规划进阶(与矩阵相关)篇)62-不同路径
leetcode原题:
题解为:
class Solution: def uniquePaths(self, m: int, n: int) -> int: # 定义一维空间,其大小为 n,值全是1 dp = [1] * n for i in range(1, m): for j in range(1, n): # i行第j列位置的路径数量 = # 第i - 1行第j列位置的路径数量(上方值) + 第i行第j - 1列位置的路径数量(左边) dp[j] = dp[j] + dp[j - 1] # 返回最后一个的结果 return dp[-1]
200道大数据面试常考Leetcode算法题(动态规划进阶(与矩阵相关)篇)63-不同路径Ⅱ
Leetcode原题:
题解为:
class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: width = len(obstacleGrid[0]) dp = [0 for i in range(width)] dp[0] = 1 # 自低向上循环 for row in obstacleGrid: for j in range(width): # 左边的格子如果没有障碍物就是1,如果有障碍物则是0 if row[j] == 1: dp[j] = 0 # 当前格子走法 = 右边格子走法 + 下方格子走法 elif j > 0: dp[j] += dp[j - 1] return dp[width - 1]
200道大数据面试常考Leetcode算法题(动态规划进阶(与矩阵相关)篇)64-最小路径和
Leetcode原题:
题解为:
class Solution: def minPathSum(self, grid: List[List[int]]) -> int: # i为数组的行 for i in range(len(grid)): # j为数组的列 for j in range(len(grid[0])): # 判断当位于第一行 if (i == 0 and j != 0): # 所有的dp[i - 1][j] 都在第一行上边,出了数组上边界 grid[i][j] += grid[i][j - 1] # 判断当位于第一列 elif (i != 0 and j == 0): # 所有的 dp[i][j - 1] 都在第一列左边,出了数组左边界 grid[i][j] += grid[i - 1][j] # 当位于第一行第一列(i == 0 and j == 0) elif (i == 0 and j == 0): continue # 位于数组里面某一位置 else: grid[i][j] += min(grid[i-1][j], grid[i][j-1]) # 遍历完全部行和列之后,返回最后的值 dp[-1][-1] return grid[-1][-1]
200道大数据面试常考Leetcode算法题(动态规划进阶(与矩阵相关)篇)221-最大正方形
Leetcode原题为:
题解为:
class Solution: def maximalSquare(self, matrix: List[List[str]]) -> int: # 定义边长 r = 0 row = len(matrix)#行 col = len(matrix[0])#列 for i in range(row): for j in range(col): matrix[i][j] = int(matrix[i][j])#转为数字好判断点 if i and j and matrix[i][j]: #转移方程,依赖于左边,上面,左上面的最大边数,选择最小的一个边 matrix[i][j] = min(matrix[i - 1][j], matrix[i][j-1], matrix[i-1][j-1]) + 1 # 找到最大的边长 r = max(r, matrix[i][j]) #返回面积 return r * r
好啦,这期的分享到这里结束啦!我们下期(动态规划在进阶(序列类动态规划问题)篇)再见!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。