leetcode第一刷_Unique Binary Search Trees[通俗易懂]

leetcode第一刷_Unique Binary Search Trees

大家好,又见面了,我是全栈君。

这道题事实上跟二叉搜索树没有什么关系,给定n个节点,让你求有多少棵二叉树也是全然一样的做法。思想是什么呢,给定一个节点数x。求f(x),f(x)跟什么有关系呢,当然是跟他的左右子树都有关系。所以能够利用其左右子树的结论。大问题被成功转化成了小问题。最熟悉的方法是递归和dp。这里显然有大量的反复计算。用dp打表好一些。

后来实验的同学说,这事实上是一个Catalan数,上网查了一下,果然啊。Catalan数是这样子的:

h(0) = 1, h(1) = 1;

递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)h(0) (n>=2)

解为:h(n)=C(2n,n)/(n+1) (n=0,1,2,…)

当中数列的前几项是:1,2,5,14,42,非常多公司的笔试题都会问这个。通常是到5。知道了通项公式,直接秒杀。

Catalan数的应用当然不止求树的个数。还有非常多。算法考试中最难的一个题,问在多边形中放入不相交的对角线,一共同拥有多少种不同的分法,请依据矩阵相乘的方法来想。矩阵相乘在课堂上讲过。是在一连串的矩阵乘法中加入括号,使实际的乘法数最少。

原来都能够用Catalan数来解。

class Solution {
	public:
    		int numTrees(int n) {
        		vector<int> res(n+1, 0);
        		res[0] = 1;
       			for(int i=1;i<=n;i++){
        	    		for(int j=0;j<i;j++){
                			res[i] += res[j]*res[i-j-1];
            			}
        		}
        		return res[n];
    		}
};

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115272.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2023电子科技大学计算机考研信息汇总及答案_计算机考研难度排行榜

    2023电子科技大学计算机考研信息汇总及答案_计算机考研难度排行榜N诺小程序-计算机学习考研必备神器电子科技大学计算机科学与工程学院电子科技大学信息与软件工程学院电子科技大学基础与前沿研究院电子科技大学电子科学技术研究院电子科技大学通信抗干扰技术国家级重点实验室电子科技大学数学科学学院电子科技大学(UniversityofElectronicScienceandTechnologyofChina)坐落于四川省会成都市,直属中华人民共和国教育部,由教育部、工业和信息化部、四川省和成都市共建。是国家“…

    2022年10月9日
    5
  • C++大数运算_size_t几个字节

    C++大数运算_size_t几个字节#include<cstring>#include<string>#include<iostream>usingnamespacestd;constexprautoMAXN=9999;constexprautoMAXSIZE=1000;constexprautoDLEN=4;classBigN{priv…

    2022年9月28日
    3
  • msfconsole是什么意思_msfconsole渗透手机

    msfconsole是什么意思_msfconsole渗透手机先模拟多层内网,摸清后渗透的使用,再从学校入手。内网渗透test网络拓扑以kali为攻击机,xp作为跳板主机,win7是内网主机xp主机是提供web,FTP等服务,已被kali机获取shellwin7正常不与外网访问,和DMZ区域处于同一网段环境搭建使用VMware的主机模式,构建虚拟局域网。查看Host-only模式详解虚拟网络编译器中添加两块网卡vm1,vm2。类型:主…

    2025年9月30日
    3
  • linux 查看当前用户密码

    linux 查看当前用户密码用过Linux系统的人都知道,Linux系统查看用户不是会Windows那样,鼠标右键看我的电脑属性,然后看计算机用户和组即可。那么Linux操作系统里查看所有用户该怎么办呢?用命令。其实用命令就能很轻松的查看到Linux系统有哪些用户。  1、Linux里查看所有用户  (1)在终端里.其实只需要查看/etc/passwd文件就行了.  (2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户.  或者用cat/etc/passwd|cut-f1-d:  2、用.

    2022年6月4日
    93
  • 一文搞定BP神经网络——从原理到应用(原理篇)「建议收藏」

    一文搞定BP神经网络——从原理到应用(原理篇)「建议收藏」神经网络结构以及前向传播过程损失函数和代价函数反向传播1矩阵补充知识11矩阵求梯度12海塞矩阵13总结2矩阵乘积和对应元素相乘3反向传播原理四个基础等式4反向传播总结41单样本输入公式表42多样本输入公式表本文小结Hello,对于神经网络的原理,我入门了好多次,每次都觉得懂了,但是其实内部原理并没有理解透彻。经过不懈努力,终于茅塞顿开,遂总结此文。本

    2022年7月20日
    14
  • 算法解剖系列-Canny边缘检测原理及实现「建议收藏」

    算法解剖系列-Canny边缘检测原理及实现「建议收藏」Canny边缘检测原理及Matlab实现

    2022年5月29日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号