• LeetCode Unique Binary Search Trees


     1 class Solution {
     2 public:
     3     int numTrees(int n) {
     4         return dfs(1, n);
     5     }
     6     
     7     int dfs(int start, int end) {
     8         if (start >= end) return 1;
     9         int count = 0;
    10         // choose different number from [start, end] as the root
    11         for (int i = start; i <= end; i++) {
    12             // number of left tree cases * number of right tree cases
    13             count += dfs(start, i - 1) * dfs(i + 1, end); 
    14         }
    15         return count;
    16     }
    17 };

    想到了就简单,再水一发

    第二轮:

    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

    就是卡特兰数其实,f(n) = f(0) * f(n-1) + f(1) * f(n-2)... + f(n-1) * f(0),题目中递增序列具体区间没有关系,只要关心其内数字个数即可:

    class Solution {
    public:
        int numTrees(int n) {
            if (n <= 1) {
                return 1;
            }
            vector<int> dp(n+1, 0);
            dp[0] = dp[1] = 1;
            for (int i=2; i<=n; i++) {
                for (int j=1; j<=i; j++) {
                    dp[i] += dp[j-1] * dp[i-j];
                }
            }
            return dp[n];
        }
    };
  • 相关阅读:
    查看JAVA占用CPU高的线程日志
    行为面试法(STAR)
    下载mysql document
    win10 子系统ubuntu中文乱码
    java 排序
    进制
    开始转型学习java
    java Collections工具类
    java Map实例
    java Map
  • 原文地址:https://www.cnblogs.com/lailailai/p/3622201.html
Copyright © 2020-2023  润新知