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]
相关推荐
zephyr058 分钟前
数据结构-并查集
数据结构
稚南城才子,乌衣巷风流43 分钟前
动态树(Dynamic Tree)数据结构详解
数据结构·算法
zander2581 小时前
114. 二叉树展开为链表
数据结构·链表·深度优先
小肝一下2 小时前
3. 单链表
c语言·数据结构·c++·算法·leetcode·链表·dijkstra
tachibana22 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
延凡科技16 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
皓月斯语21 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
春日见1 天前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
萌动的小火苗1 天前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
叩码以求索1 天前
统计按位或能得到最大值的子集数目(一)
数据结构·算法