【leetcode】23.Unique Binary Search Trees

以i爲根節點時,其左子樹構成爲[0,...,i-1],其右子樹構成爲[i+1,...,n]構成。根結點肯定時,左子樹與右子樹的結點個數都是肯定的。java

這樣就能夠把這個問題化成子問題。所以能夠用動態規劃解。spa

Sigma(左邊的子樹可能狀態 * 右邊子樹可能狀態) = 當前個數的結點可能的狀態數。blog

public class Solution {
    public int numTrees(int n) {
        int nums[] = new int[n+1];
        if(n<=1)
            return 1; 
        nums[0]=1;
        nums[1]=1;
        for(int i=2; i<=n; i++){
            nums[i]=0;
            for(int j=0; j<i; j++){
                int leftNum = nums[j];
                int rightNum = nums[i-j-1];
                nums[i] += leftNum * rightNum;
                
            }
        }
        return nums[n];
    }
}

  JAVA效率就是比較低啊……300+ms。 一樣的過程用C寫就4ms。io

相關文章
相關標籤/搜索