【动态规划专栏】动态规划:卡特兰数---不同的二叉树

简介: 【动态规划专栏】动态规划:卡特兰数---不同的二叉树


题目来源

本题来源为:

Leetcode96. 不同的二叉搜索树

题目描述

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

算法原理

1.状态表示

经验+题目要求

对于本题而言就是:

dp[i]表示:节点个数为i的时候,一共有多少钟二叉树

2.状态转移方程

根据规律发现重复子问题:

因此状态方程为:

dp[i]+=dp[i-j]*dp[j-1];

3.初始化

4.填表顺序

从左往右

5.返回值

dp[n]

代码实现

动态规划的代码基本就是固定的四步:

1.创建dp表
2.初始化
3.填表
4.返回值

本题完整代码实现:

class Solution 
{
public:
    int numTrees(int n) 
    {
        vector<int> dp(n+1);
        dp[0]=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                dp[i]+=dp[i-j]*dp[j-1];
            }
        }
        return dp[n];
    }
};
相关文章
|
9月前
|
算法
【动态规划专栏】动态规划:似包非包---不同的二叉树
【动态规划专栏】动态规划:似包非包---不同的二叉树
60 0
|
9月前
|
算法
【算法】——动态规划题目讲解
【算法】——动态规划题目讲解
|
算法 搜索推荐
【LeetCode力扣】LCR170 使用归并排序的思想解决逆序对问题(详细图解)
【LeetCode力扣】LCR170 使用归并排序的思想解决逆序对问题(详细图解)
115 0
|
8月前
|
机器学习/深度学习 存储 算法
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
|
8月前
|
存储 算法 数据可视化
LeetCode 题目 96:从动态规划、递归到卡塔兰数实现不同的二叉搜索树
LeetCode 题目 96:从动态规划、递归到卡塔兰数实现不同的二叉搜索树
|
8月前
蓝桥杯-动态规划-子数组问题
蓝桥杯-动态规划-子数组问题
|
9月前
|
索引
力扣---最长回文子串(动态规划)
力扣---最长回文子串(动态规划)
|
9月前
【Leetcode 5】最长回文字串 —— 动态规划
我们可以使用动态规划解决本题,解题思路: 1. 状态定义:`dp[l][r]`表示起点为i,终点为j的字串是否回文串 2. 状态转移方程:`dp[l][r] = dp[l + 1][r - 1] && char[l] == char[r]`,即dp[l + 1][r - 1]为回文串且i和j的字符相同
|
存储 JavaScript 算法