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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Make autofill background transparent[通俗易懂]

    Make autofill background transparent[通俗易懂]https://jsfiddle.net/ju3g47jh/14/div.select_custom_background{  background-image:url(http://i.stack.imgur.com/mbisi.png)!important;  width:175px}input{  backgr

    2022年7月21日
  • 贴片器件的识别[通俗易懂]

    贴片器件的识别[通俗易懂]前言实际板子上,贴片原件一般就较小,如果想知道贴片原件值,而且贴片件上有些标识.如果能辨别标识的含义,就不用将器件查下来量了。如果眼神不好(或者原件实在太小了),可以用工业显微镜拍下来,再识别原件上印刷的器件标识。在显微镜下,光滑好看的焊点,也变的那么粗糙:)慢慢记录,见到能用标识识别的器件,就记录一下。笔记0贴片电阻看到0R电阻电阻上画了一个小方框…

    2022年8月21日
  • SSM整合,非常详细的SSM整合[通俗易懂]

    SSM整合,非常详细的SSM整合[通俗易懂]对于ssm框架网上有很多,这里只是自己为大家提供的一个ssm整合框架参考分享,这个前提是基于maven的管理工具写的,如果觉得写得不好,博主这边已经把代码上传了:不妨可以参考代码再理解学习:https://download.csdn.net/download/qq_30764991/11012764如果觉得文章不错,对你有帮助,请作者喝杯咖啡,谢谢!如果对您有帮助,请多多支持.多少都…

    2022年4月28日
  • 简述struts2拦截器的作用_拦截器什么时候被调用

    简述struts2拦截器的作用_拦截器什么时候被调用如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器): 0(必须加,否则出错)也可以改为对全局Action设置自己需要的拦截器,如下:在struts.xml里面定义全局的配置设

    2022年10月6日
  • java大数据培训,如何选择适合自己的培训机构开发_大数据培训课程哪个好

    java大数据培训,如何选择适合自己的培训机构开发_大数据培训课程哪个好如何挑选Java大数据培训机构?对于有java的基础的人来说,可以视情况直接跳过java阶段的学习,那么学习时间就可以少一个多月时间,当然前提是基础足够扎实,如果你只是自学了一点java的知识,那么最好还是要从0开始学大数据,选择一家靠谱的Java培训机构。    如何挑选Java大数据培训机构?  想要学好大数据,就要选择好的培训大数据培训机构,那么,如何评判一个培训机构是一个好的培训机构…

    2022年10月21日
  • vue父组件向子组件传值_vue什么是父子组件

    vue父组件向子组件传值_vue什么是父子组件组件化开发是目前前端开发必备的开发技能,组件化开发可以大大提高开发效率今天整理一下Vue的父子组件传值方式,方便还没有理解的朋友学习。1、父组件向子组件传值<!–父组件–><!–父组件调用子组件,看成是调用子组件函数,给子组件传值,就是给函数传参数–><template> <div> <!–传递动态值前面加个…

    2022年11月2日

发表回复

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

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