day29-数据结构力扣

62.不同路径

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

思路

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

  2. 确定递推公式

dp[i][j]=dp[i-1][j]+dp[i][j-1]

3.dp数组如何初始化

dp[0][j]=1

dp[i][0]=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

  • dp[i][j] = 到达 (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]
相关推荐
Shadow(⊙o⊙)2 小时前
C++常见错误解析2.0
开发语言·数据结构·c++·后端·学习·算法
数智化精益手记局2 小时前
4m变更管理实战:拆解4m变更管理四大要素的管控功能与常见难题
大数据·数据结构·数据库·人工智能·精益工程
agilearchitect3 小时前
Matlab导入Excel表格教程:从基础到进阶全攻略
数据结构·其他·matlab·excel
xieliyu.3 小时前
Java手搓数据结构:从零模拟实现单向无头非循环链表
java·数据结构·学习·链表
爱写代码的倒霉蛋3 小时前
2021天梯赛L2-4真题解析
数据结构·算法
white-persist3 小时前
逆向入门经典题:从 IDA 反编译坑点到 Python 解题详细分析解释
c语言·开发语言·数据结构·python·算法·逆向·安全架构
北顾笙9804 小时前
day30-数据结构力扣
数据结构·算法·leetcode
01二进制代码漫游日记4 小时前
【C语言数据结构】之解锁双向链表(指定位置插入、删除节点、查找、销毁链表等操作)
c语言·数据结构·链表
Engineer邓祥浩4 小时前
知识点1 时间复杂度、空间复杂度
java·数据结构·算法