# Solving Leetcode Interviews in Seconds with AI: Unique Binary Search Trees


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "96" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> 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  

	# Explanation
	Here's the solution to the problem:

*   **Catalan Numbers:** The number of structurally unique BSTs with `n` nodes is given by the `n`th Catalan number. The Catalan numbers can be computed using the formula: C(n) = (2n)! / ((n+1)! * n!) or recursively C(n) = sum(C(i) * C(n-1-i)) for i in range(n).
*   **Dynamic Programming:** To avoid redundant calculations, we use dynamic programming to store and reuse the Catalan numbers for smaller values. Specifically, we will use the recursive approach in a DP manner.
*   **Base Cases:** C(0) = 1 and C(1) = 1 are the base cases for the recursion.

*   **Runtime Complexity:** O(n^2), **Storage Complexity:** O(n)

	
	# Code
	```python
	def numTrees(n: int) -> int:
    """
    Calculates the number of structurally unique BSTs with n nodes.

    Args:
        n: The number of nodes in the BST.

    Returns:
        The number of structurally unique BSTs.
    """

    dp = [0] * (n + 1)
    dp[0] = 1
    dp[1] = 1

    for i in range(2, n + 1):
        for j in range(i):
            dp[i] += dp[j] * dp[i - 1 - j]

    return dp[n]
	```
			
