【LeetCode】Unique Binary Search Trees

来源:互联网 发布:c语言速成手册 编辑:程序博客网 时间:2024/06/16 19:54

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

题解:

最优子结构:

当0个结点时,输出0

当1个结点时,输出1

当N个结点时,总个数为将根结点选为[1,N]的结点时子树之和,记为a[N]

对于任意被选为根结点的j,其左子树解空间为[1,j-1),子树个数为a[j-1],右子树为[j+1,N],子树个数为a[N-j]

总的解个数为a[j-1]*a[N-j],N从1循环至待求的值


public class Solution{public static int numTrees(int n){if (n == 0)return 0;int[] a = new int[n + 1];a[0] = 1;a[1] = 1;for (int i = 1; i <= n; i++) {int temp = 0;for (int j = 1; j <= i; j++)temp += a[j - 1] * a[i - j];a[i] = temp;}return a[n];}}

注意用temp保留计算结果,在第i个值计算完成后再进行a[i]的更新


0 0
原创粉丝点击