当前位置: 首页 > article >正文

代码随想录算法训练营第三十八天| 动态规划02

62. 不同路径

本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。

代码随想录

视频讲解:动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_bilibili

注意点:

1. dp表示的是从原点到坐标点的路径有几条

2. 递推公式dp[i][j]=dp[i-1][j]+dp[i][j-1]

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp=[[0]*n for _ in range(m)]
        for i in range(m):
            dp[i][0]=1
        for i in range(n):
            dp[0][i]=1
        for i in range(1,m):
            for j in range(1,n):
                dp[i][j]=dp[i-1][j]+dp[i][j-1]
        return dp[m-1][n-1]

63. 不同路径II

代码随想录

视频讲解:动态规划,这次遇到障碍了| LeetCode:63. 不同路径 II_哔哩哔哩_bilibili

在上一题的基础上做改动:

1. 如果出发点和目标点有障碍物则返回0

2. 初始化时,如果当前格有障碍物,则后续行/列的dp值均为0

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        m=len(obstacleGrid)
        n=len(obstacleGrid[0])
        if obstacleGrid[0][0]==1 or obstacleGrid[m-1][n-1]==1:
            return 0
        dp=[[0]*n for _ in range(m)]
        dp[0][0]=1
        for i in range(1,m):
            dp[i][0]=dp[i-1][0] if obstacleGrid[i][0]==0 else 0
        for j in range(1,n):
            dp[0][j]=dp[0][j-1] if obstacleGrid[0][j]==0 else 0
        for i in range(1,m):
            for j in range(1,n):
                if obstacleGrid[i][j]==0:
                    dp[i][j]=dp[i-1][j]+dp[i][j-1]
        return dp[m-1][n-1]


http://www.kler.cn/a/548926.html

相关文章:

  • BY组态:工业自动化的未来,触手可及
  • Uniapp 实现顶部标签页切换功能?
  • 【一起学Rust 框架篇 Tauri2.0框架】Tauri2.0环境搭建与项目创建
  • 【第11章:生成式AI与创意应用—11.3 AI艺术创作的实现与案例分析:DeepArt、GANBreeder等】
  • 联合概率:定义、公式和示例
  • 【第3章:卷积神经网络(CNN)——3.2卷积层、池化层、全连接层的详细介绍】
  • Tomcat的升级
  • 启程C++
  • Pycharm 2024在解释器提供的python控制台中运行py文件
  • 04性能监控与调优篇(D4_JVM参数)
  • 【算法与数据结构】并查集详解+题目
  • CPU占用很高排查方案
  • Linux操作系统:网络配置与系统监控优化
  • MySQL、MariaDB 和 TDSQL 的区别
  • SQLite Select 语句详解
  • sklearn.CalibratedClassifierCV校准分类器预测概率
  • 日常工作管理软件比较:6款工具的优缺点深度分析
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析①】
  • 4.SpringSecurity在分布式环境下的使用
  • C#使用文件读写操作实现仙剑五前传称号存档修改