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]
相关推荐
顾人间讥诘3 分钟前
卡特兰数及相关应用场景
算法
CoderYanger5 分钟前
A.每日一题——3625. 统计梯形的数目 II
java·算法·leetcode·职场和发展
松涛和鸣7 分钟前
24、数据结构核心:队列与栈的原理、实现与应用
c语言·开发语言·数据结构·学习·算法
豐儀麟阁贵11 分钟前
9.1String类
java·开发语言·算法
三炭先生16 分钟前
计算机视觉算法--第一章:概述
人工智能·算法·计算机视觉
唯道行19 分钟前
计算机图形学·21 梁友栋-Barsky直线裁剪算法与三维直线裁剪
人工智能·算法·机器学习·计算机视觉·计算机图形学·opengl
魂梦翩跹如雨20 分钟前
Java BigDecimal与RoundingMode的用法总结
java·算法
little~钰23 分钟前
线段树和扫描线结合
数据结构·算法
CoderYanger28 分钟前
动态规划算法-简单多状态dp问题:11.按摩师
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
秋深枫叶红29 分钟前
嵌入式第二十八篇——数据结构——队列
数据结构·学习·算法