zoukankan      html  css  js  c++  java
  • Leetcode:unique_binary_search_trees

    一、     称号

    给定的数目n。问:有多少种不同BST(二叉搜索树)

    比如:

    因为N =3,共同拥有5种独特的BST。

    1          3      3       2      1

               /      /        /      

         3      2    1     1   3     2

        /      /                        

       2     1         2                 3

    二、分析

       要求一定的二叉查找树的数量。我们知道二叉查找树能够随意取根。从处理子问题的角度来看,选取一个结点为根。可把结点分成左右子树,以这个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积,所以总数量是将以全部结点为根的可行结果累加起来。

    看到有人说到卡特兰数,这正是卡特兰数的一种定义方式。是一个典型的动态规划的定义方式。

       卡特兰数的一半公式为Cn= 1/(n+1)*(2n,n) = (2n)!/{(n+1)!*n!}



    class Solution {
    public:
        int numTrees(int n) {
            int flag=1;
            for(int i=2;i<=n;i++) {
            	flag=2*(2*i-1)*flag/(i+1); 
            }
            return flag;
        }
    };
    
    二:
    
     
    class Solution {
    public:
    	int numTrees(int n) 
    	{
    		return numTrees(1,n);
    	}
    
    	int numTrees(int start, int end)
    	{
    		if (start >= end)
    			return 1;
    
    		int totalNum = 0;
    		for (int i=start; i<=end; ++i)
    			totalNum += numTrees(start,i-1)*numTrees(i+1,end);
    		return totalNum;
    	}
    };
    
    
    
    
    class Solution {
    public:
    	int numTrees(int n) {
        	if (n < 0) return 0;
               vector<int> trees(n+1, 0);
            trees[0] = 1;
    
            for(int i = 1; i <= n; i++) 
                for (int j = 0; j < i; j++) 
                      trees[i] += trees[j] * trees[i-j-1];
            return trees[n];
    	}
    };
    


     

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Unity 执行命令行
    c#中的特性,以及一些思考
    miniui禁用combobox
    给textarea赋值并可编辑
    js不允许input输入空格
    使用OPENROWSET函数连接并访问远程数据库数据
    miniui 换页符点击无效
    AJAX基本结构及使用
    SQL Server查询数据库中包含某个值的表和字段
    js实现input输入框只能输入数字的功能
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4885569.html
Copyright © 2011-2022 走看看