Day33-动态规划

1. 不同路径-62

62. 不同路径 - 力扣(LeetCode)

python 复制代码
class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        # dp[i][j]表示i到j有多少种走法
        # dp[0][0]是1【其实也可以理解,不需要走也是一种走法】
        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]
        return dp[m-1][n-1]

2. 不同路径II-63

63. 不同路径 II - 力扣(LeetCode)

python 复制代码
class Solution(object):
    def uniquePathsWithObstacles(self, obstacleGrid):
        """
        :type obstacleGrid: List[List[int]]
        :rtype: int
        """
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        dp = [[0]*n for _ in range(m)]
        dp[0][0] = 0 if obstacleGrid[0][0] else 1
        for i in range(1,m):
            dp[i][0]=0 if obstacleGrid[i][0] or not dp[i-1][0] else 1
        for j in range(1,n):
            dp[0][j]=0 if obstacleGrid[0][j] or not dp[0][j-1] else 1
        for i in range(1,m):
            for j in range(1,n):
                dp[i][j] = 0 if obstacleGrid[i][j] else dp[i][j-1]+dp[i-1][j]
        return dp[m-1][n-1]
python 复制代码
class Solution(object):
    def uniquePathsWithObstacles(self, obstacleGrid):
        """
        :type obstacleGrid: List[List[int]]
        :rtype: int
        """
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        dp = [[0]*n for _ in range(m)]
        # dp[0][0] = 0 if obstacleGrid[0][0] else 1
        # for i in range(1,m):
        #     dp[i][0]=0 if obstacleGrid[i][0] or not dp[i-1][0] else 1
        # for j in range(1,n):
        #     dp[0][j]=0 if obstacleGrid[0][j] or not dp[0][j-1] else 1
        for i in range(m):
            if obstacleGrid[i][0]:
                break
            dp[i][0]=1
        for j in range(n):
            if obstacleGrid[0][j]:
                break
            dp[0][j]=1
        for i in range(1,m):
            for j in range(1,n):
                dp[i][j] = 0 if obstacleGrid[i][j] else dp[i][j-1]+dp[i-1][j]
        return dp[m-1][n-1]

3. 整数拆分-343

343. 整数拆分 - 力扣(LeetCode)

python 复制代码
class Solution(object):
    def integerBreak(self, n):
        """
        :type n: int
        :rtype: int
        """
        # dp[n]就是n拆分后得到的乘积最大值
        # dp[i]=max(j*dp[i-j])
        dp=[0,0,1]  # dp[0]和dp[1]都没有意义,就是0
        if n==2:
            return dp[2]
        for i in range(3,n+1):
            dp.append(i-1)
            for j in range(2,i//2+1):  # 优化
                dp[i] = max(dp[i],dp[i-j]*j,(i-j)*j)
        return dp[n]

4. 不同的二叉搜索树-96

96. 不同的二叉搜索树 - 力扣(LeetCode)

python 复制代码
class Solution(object):
    def numTrees(self, n):
        """
        :type n: int
        :rtype: int
        """
        # dp[i]有多棵树
        # dp[i]其实就是确定一个头节点,然后左子树的个数乘以右子树的个数,对所有情况进行加和!
        # dp[0]也是1
        dp=[1,1]
        if n==1:
            return 1
        for i in range(2,n+1):
            dp.append(0)
            for j in range(1,i+1):
                dp[i]+=dp[j-1]*dp[i-j]
        return dp[n]
相关推荐
大江东去浪淘尽千古风流人物5 小时前
【MSCKF】零空间 UpdaterHelper::nullspace_project_inplace 的实现细节,MSCKF边缘化含义
算法·性能优化·vr·dsp开发·mr
棒棒的皮皮5 小时前
【OpenCV】Python图像处理之像素操作
图像处理·python·opencv
ChrisitineTX5 小时前
警惕数据“陷阱”:Python 如何自动发现并清洗 Excel 中的异常值?
开发语言·python·excel
AndrewHZ5 小时前
【图像处理基石】图像处理中的色彩经典算法原理与实战解析
图像处理·算法·计算机视觉·白平衡·色彩科学·经典算法·k means
꒰ঌ小武໒꒱5 小时前
Trae CN IDE 使用教程
前端·python·编辑器
Dev7z5 小时前
基于Matlab多算法的图像增强与客观质量评价系统
人工智能·算法·matlab
xcLeigh5 小时前
【新】Rust入门:基础语法应用
开发语言·算法·rust
小年糕是糕手5 小时前
【C++同步练习】类和对象(一)
java·开发语言·javascript·数据结构·c++·算法·排序算法
小O的算法实验室5 小时前
2025年IJPR SCI2区,基于混合邻域结构的高效稳定智能调度算法用于柔性作业车间调度,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
再卷也是菜5 小时前
C++篇(23)B树
数据结构·b树