96.不同的二叉搜索樹

在這裏插入圖片描述
思考過程:
1.能不能遞歸求出所有的二叉搜索樹呢?
2.相鄰的答案之間有沒有規律呢?
3.找不到規律,但找出了每一個答案下的所有結果
4.看題解,才明白。。

下次做DP題目也這麼思考,先看遞歸否,再找怎麼由之前的答案推出現在的答案來。

  • ans[n]爲所求答案,也就是節點數爲n時,有多少二叉搜索樹。
  • f(i)是以i爲根節點的二叉搜索樹的個數,左子樹有i-1個元素,右子樹有n-i個元素。
  • 所以f(i)=ans[i-1]*ans[n-i],左子樹有ans[i-1]個可能,所以要相乘。
class Solution {
    public int numTrees(int n) {
        int[] ans=new int[n+1];
        ans[0]=ans[1]=1;
        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
                ans[i]+=ans[j-1]*ans[i-j];
            }
        }
        return ans[n];
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章