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

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


题目来源

本题来源为:

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];
    }
};
相关文章
|
6月前
|
算法
【动态规划专栏】动态规划:似包非包---不同的二叉树
【动态规划专栏】动态规划:似包非包---不同的二叉树
46 0
|
6月前
|
算法
【算法】——动态规划题目讲解
【算法】——动态规划题目讲解
|
6月前
|
算法
回溯算法练习题
回溯算法练习题
38 0
|
6月前
动态规划——OJ题(一)
动态规划——OJ题(一)
63 1
|
11月前
|
机器学习/深度学习 自然语言处理
动态规划算法Oj题(一)
动态规划算法Oj题(一)
45 0
|
12月前
【动态规划刷题】整数拆分
【动态规划刷题】整数拆分
77 0
蓝桥杯备赛leetcode 70.爬楼梯,用最经典的题目来讲解动态规划
题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼梯顶部呢?
蓝桥杯备赛leetcode 70.爬楼梯,用最经典的题目来讲解动态规划
蓝桥杯AcWing 题目题解 - 递归与递推
蓝桥杯AcWing 题目题解 - 递归与递推
|
存储 JavaScript 算法
|
算法 C++
数据结构与算法之爬楼梯&&动态规划
数据结构与算法之爬楼梯&&动态规划
115 0
数据结构与算法之爬楼梯&&动态规划