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]
相关推荐
Logic10122 分钟前
C语言/数据结构位运算题解:异或XOR找出英雄队伍中的“独特战斗力“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Cccp.12335 分钟前
【leetcode】(九)哈希函数与哈希表
数据结构·leetcode·哈希算法
余额瞒着我当琳14 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法
程序员南飞14 小时前
win系统安装minio
java·数据结构·算法
w_zero_one16 小时前
链表(4)
java·数据结构·算法
白山编程大哥18 小时前
C语言篇:语法进阶
c语言·数据结构·算法
Logic10118 小时前
C语言/数据结构动态规划题解:爬楼梯(含坏台阶)——避开障碍物的路径计数
c语言·数据结构·动态规划·时间复杂度·空间复杂度·算法题·爬楼梯
All for pursuit.20 小时前
【回溯-6】79.单词搜索
数据结构·c++·算法·leetcode
Benny_Tang20 小时前
AT_arc180_d [ARC180D] Division into 3 题解
数据结构·c++·算法
殷色玫瑰20 小时前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio