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]
相关推荐
fengfuyao9851 小时前
匈牙利算法的MATLAB实现
java·算法·matlab
路过君_P1 小时前
C++ 算法题解:迷宫寻路
c++·算法·深度优先
罗湖老棍子1 小时前
二维vector完全指南1:从定义到增删改查
数据结构·c++·算法·stl
再卷也是菜1 小时前
C++篇(22)LRU Cache
数据结构·c++·算法
语落心生1 小时前
海量数据集的AI自动化预测打标 -- 振动特征多标签分类
算法
语落心生1 小时前
海量数据集AI自动化打标 - 温度周期检测
算法
语落心生1 小时前
海量数据集的AI自动化预测打标 -- 矿业音频分类
算法
吃着火锅x唱着歌1 小时前
LeetCode 3185.构成整天的下标对数目II
算法·leetcode·职场和发展
鱼鱼块1 小时前
《最小栈的巧妙设计:用辅助栈实现 O(1) 获取最小值》
javascript·算法·面试
San301 小时前
反转字符串与两数之和:两道简单题背后的 JavaScript 思维深度
javascript·算法·面试