Leetcode 96. 不同的二叉搜索树

心路历程:

这道题说实话有点不好想,很难第一时间想到是DP问题,与其说这是一个动态规划,其实更像是一个找规律的问题。

假设当前有n个结点,那么以第i个结点(按大小顺序)为根节点,其左子树有i-1个结点,右子树有n-i个结点,那么其实这种情况下就有dp(i-1)*dp(n-i)种情况,然后再去遍历这个i即可。

解法:递推式DP

python 复制代码
class Solution:
    def numTrees(self, n: int) -> int:
        # 想不到这是一个动态规划题
        res = [0] * (n+1)
        res[0] = 1
        res[1] = 1
        for i in range(2, n + 1):
            for j in range(i):
                res[i] += res[j] * res[i-j-1]  # 以j为根节点,共i-1个结点,j的左子树有j个,右侧有i-1-j个            
        return res[n]
相关推荐
艾醒5 分钟前
探索大语言模型(LLM):大模型微调方式全解析
人工智能·算法
小许学java2 小时前
七大排序算法的基本原理
数据结构·算法·排序算法
艾醒2 小时前
大模型面试题剖析:深入解析 Transformer 与 MoE 架构
人工智能·算法
艾醒2 小时前
探索大语言模型(LLM):一文读懂通用大模型的定义、特点与分类
算法
格林威3 小时前
短波红外相机在工业视觉检测中的应用
人工智能·深度学习·数码相机·算法·计算机视觉·视觉检测
_dindong4 小时前
动规:01背包
数据结构·笔记·学习·算法·leetcode·动态规划·力扣
格林威5 小时前
UV紫外相机在工业视觉检测中的应用
人工智能·深度学习·数码相机·算法·计算机视觉·视觉检测·uv
软件算法开发5 小时前
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
算法
Gary Studio6 小时前
第三类笔记
笔记·算法
C30_06 小时前
10.4作业
算法