Skip to content

Latest commit

 

History

History
25 lines (25 loc) · 898 Bytes

96.md

File metadata and controls

25 lines (25 loc) · 898 Bytes

#96. Unique Binary Search Trees 题目链接

public class Solution {
    public int numTrees(int n) {
        // 创建一个数组来记录
        int[] g = new int[n + 1];
        // 前两个设为1,应为1个结点和0个结点都只有一种情况
        g[0] = g[1] = 1;
        /*
            自底向上的动态规划
            假设f(1,5)是当n等于5的时候,以结点1为顶点的所有可能情况
            g[n] = f(1,5)+f(2,5),...+f(5,5)
            f(2,5)的左子树所有可能情况为g(1),右子树可能情况为g(3)
            所以f(2,5)=g(1)*g(3),其他同理,这样就可算出递推公式
         */
        for (int i = 2; i <= n; i++) {
            for (int j = 0; j < i; j++) {
                g[i] += g[j] * g[i - 1 - j];
            }
        }
        return g[n];
    }
}