刷题找工作刷题找工作。
呜呜呜我好紧张啊明天有两个面试。
好紧张好紧张。
题目链接
自己的思路
无思路
官方题解
理解
给定一个有序序列 1⋯n,为了构建出一棵二叉搜索树,我们可以遍历每个数字 i,将该数字作为树根,将 1⋯(i−1) 序列作为左子树,将 (i+1)⋯n 序列作为右子树。接着我们可以按照同样的方式递归构建左子树和右子树。
在上述构建的过程中,由于根的值不同,因此我们能保证每棵二叉搜索树是唯一的。
class Solution {
public int numTrees(int n) {
int[] G = new int[n+1];
G[0] = 1;
G[1] = 1;
for(int i = 2; i <= n ; i++){
for(int j = 1; j <= i; j++){
//我们可以发现,G(n)与序列的内容无关,只和序列的长度有关,
//以j为根
//为0是无左子树,为n是为右子树
G[i] += G[j-1] * G[i - j];
}
}
return G[n];
}
}