LINTCODE——不同的二叉查找树
思路:找到一般规律迭代就好了,不建议用递归,能用迭代还是迭代好一些;
规律,假设L= n-1 ,R = 0 ; T(0) =1,T(1) =1,对于n>=2,有
T(n) += 2 * T[L–]*T[R++] ,当L==R的时候前面的2去掉就好了;
class Solution {
public:
/*
* @param n: An integer
* @return: An integer
*/
int numTrees(int n) {
// write your code here
vector<int> num;
num.push_back(1);
num.push_back(1);
int index = num.size() - 1;
while(index < n)
{
int temp = 0;
for(int L = index ,R = 0 ; L >= R ; L-- ,R++)
{
if(L == R )
temp += num[L]*num[R];
else
temp += 2*num[L]*num[R];
}
index++;
num.push_back(temp);
}
return num[n];
}
};