0096. Unique Binary Search Trees

https://leetcode.com/problems/unique-binary-search-trees

Description

Given an integer n, return *the number of structurally unique **BST'*s (binary search trees) which has exactly n nodes of unique values from 1 to n.

Example 1:

**Input:** n = 3
**Output:** 5

Example 2:

**Input:** n = 1
**Output:** 1

Constraints:

  • 1 <= n <= 19

ac

class Solution {
    public int numTrees(int n) {
        // edge case
        if (n <= 1) return 1;

        int[] dp = new int[n+1]; // For a number n, how many trees can be constructed.
        dp[0] = 1;

        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < i; j++) { // For an n-length array, e.g. [0,1,2], iterate each element as root node.
                dp[i] += dp[j] * dp[i-j-1];
            }
        }

        return dp[n];
    }
}

/*
this dp is special, like dp + divide&conquer
similar: https://leetcode.com/problems/encode-string-with-shortest-length/description/
*/

Last updated