zoukankan      html  css  js  c++  java
  • 【Leetcode】【Medium】Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

    For example,
    Given n = 3, there are a total of 5 unique BST's.

       1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3

    解题:

    单纯的看做一个数列题:1, 2, 5, 14, 42, 132, ... , 求通项。

    这是一个典型的卡塔兰数,中国人明安图比卡塔兰早100多年就发现了这种数列,其实更应该叫明安图数。

    程序实现不用这么做,不过还是给出通项公式:f(n) = (2n)! / [(n+1)! * n!];

    在原列前补充一个值为1的0位:1, 1, 2, 5, 14, 42, 132, ...

    则从新数列第3个数(2)开始,f(n) = f(0) * f(n-1)  +  f(1) * f(n-2)  +  ...  +  f(n-1) * f(0);

    代码:

     1 class Solution {
     2 public:
     3     int numTrees(int n) {
     4         if (n == 0)
     5             return 0;
     6         vector<int> res(n+1, 0);
     7         res[0] = res[1] = 1;
     8         
     9         for (int i = 2; i <= n; ++i) {
    10             for (int j = 0; j < i; ++j) {
    11                 res[i] += res[j] * res[i-1-j];
    12             }
    13         }
    14         
    15         return res[n];
    16     }
    17 };

    Leetcode测试集中没有考察n为0的情况,我认为n为0时还是有意义的,应该返回0。



  • 相关阅读:
    使用android-ndk官方ndkbuild例子
    小米8如何root
    Ubuntu点击dash home就崩溃
    Python自定义排序
    adb命令
    sqoop数据导出导入命令
    Docker命令详解
    如何输出第二列相同的行
    如何使用Xmanager及VNC登录远程桌面
    搭建GoldenGate的单向复制环境
  • 原文地址:https://www.cnblogs.com/huxiao-tee/p/4273458.html
Copyright © 2011-2022 走看看