96. Unique Binary Search Trees

来源:互联网 发布:超人的披风 软件 编辑:程序博客网 时间:2024/05/19 13:16

96. Unique Binary Search Trees

题目:

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

开始时,尝试用递归实现,但是超时了,可见系统对运行时间有要求。因为递归过程中存在大量的重复计算,从n一层层往下递归,故考虑类似于动态规划的思想,让底层的计算结果能够被重复利用,故用一个数组存储中间计算结果(即 1~n-1 对应的BST数目),这样只需双层循环即可.

代码如下:

public int numTrees(int n) {    int [] G = new int[n+1];    G[0] = G[1] = 1;    for(int i=2; i<=n; ++i) {        for(int j=1; j<=i; ++j) {            G[i] += G[j-1] * G[i-j];        }    }    return G[n];}
原创粉丝点击