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]
相关推荐
wabs6661 小时前
关于二叉树【力扣144.二叉树的前序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
LuminousCPP1 小时前
数据结构-二叉树(三):堆复杂度证明与 Top-K 问题|错位相减推导 + 海量数据内存优化
c语言·数据结构·笔记·排序算法
1000世界小札7 小时前
《大话数据结构》第9章精读:归并排序与快速排序完整 C++ 实现
数据结构·c++·算法
一直C19 小时前
【数据结构】哈希表+算法复杂度与经典排序查找(C语言)
java·linux·开发语言·数据结构·算法·ubuntu·散列表
淡海水19 小时前
04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构
数据结构·算法·c#·哈希算法·编译·字典·dictionary
疯狂打码的少年20 小时前
【数据结构】板块总结 + 下期预告(数据库技术)
数据结构·笔记·算法
郝学胜-神的一滴20 小时前
Effective Python 条款 1:确认你正在使用的 Python 版本
开发语言·数据结构·python·程序人生·算法
dtq04241 天前
数据结构 - 线性表 - 单链表
数据结构
1000世界小札1 天前
排序算法全景总结:从 O(n²) 到 O(n log n),再到线性时间(附完整对比与选型指南)
数据结构·算法·排序算法