day29-数据结构力扣

62.不同路径

题目链接 62. 不同路径 - 力扣(LeetCode)

思路

  1. 确定dp数组(dp table)以及下标的含义 dpij:坐标为i,j的位置有dpij种路径

  2. 确定递推公式

dpij=dpi-1j+dpij-1

3.dp数组如何初始化

dp0j=1

dpi0=1

4.确定遍历顺序

5.举例推导dp数组

提交

python 复制代码
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        if m==0 and n==0:
            return 0
        dp=[[0]*n for _ in range(m)]
        for i in range(m):
            dp[i][0]=1
        for j in range(n):
            dp[0][j]=1
        for i in range(1,m):
            for j in range(1,n):
                dp[i][j]=dp[i-1][j]+dp[i][j-1]
        print(dp)
        return dp[m-1][n-1]

63. 不同路径 II

题目链接63. 不同路径 II - 力扣(LeetCode)

思路

  • 只能右 / 下走 ,不能走障碍物(grid[i][j]==1

  • dpij = 到达 (i,j) 的路径数

  • 规则:

    • 遇到障碍物:dp[i][j] = 0(走不通)

    • 第一行 / 第一列:前面有障碍,后面都到不了

    • 其他:dp[i][j] = dp[i-1][j] + dp[i][j-1]

注意点就是初始化的时候,要判断第一行第一列是否有障碍

提交

python 复制代码
class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        m = len(obstacleGrid)       # 行数
        n = len(obstacleGrid[0])    # 列数
        
        # 起点就是障碍物,直接返回0
        if obstacleGrid[0][0] == 1:
            return 0
        
        # 初始化dp数组
        dp = [[0] * n for _ in range(m)]
        dp[0][0] = 1  # 起点路径数=1
        
        # 初始化第一列(只能从上边来)
        for i in range(1, m):
            if obstacleGrid[i][0] == 0:  # 没障碍
                dp[i][0] = dp[i-1][0]
            # 有障碍则保持0
        
        # 初始化第一行(只能从左边来)
        for j in range(1, n):
            if obstacleGrid[0][j] == 0:  # 没障碍
                dp[0][j] = dp[0][j-1]
            # 有障碍则保持0
        
        # 填dp表
        for i in range(1, m):
            for j in range(1, n):
                # 当前是障碍物,路径数=0
                if obstacleGrid[i][j] == 1:
                    dp[i][j] = 0
                else:
                    dp[i][j] = dp[i-1][j] + dp[i][j-1]
        
        return dp[m-1][n-1]
相关推荐
xiangyun618 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun618 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
OKkankan9 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
蓝速科技9 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
xxwxx__10 小时前
C++ AVL 树深度剖析:平衡二叉搜索树原理、源码与面试考点
数据结构·c++
Logic10110 小时前
C语言/数据结构数组题解:数字列表加一(Plus One)——进位处理与数组扩展
c语言·数据结构·模拟·数组·时间复杂度·算法题·进位
xxwxx__14 小时前
C++ STL set 与 map 全套详解:关联式容器、红黑树底层、代码坑点、刷题实战
数据结构·c++
程曦曦14 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
郝学胜-神的一滴14 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
Logic10115 小时前
C语言/数据结构位运算题解:异或XOR找出流水线上的“独特零件编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质