[LeetCode] C ++:中間問題-ツリー96。さまざまな二分探索木

96.さまざまな二分探索木

中難易度1005

整数nが与えられた 場合 ノードとして1 ...  nを持つ二分探索木はいくつありますか?

例:

入力: 3
出力: 5
説明:
与えられたN = 3、構造の異なる5二分探索木がある:

   1 3 3 2 1 
    \ / / / \ \ 
     3 2 1 1 3 2 
    / / \ \ 
   2 1 2 3

動的計画法

class Solution {
public:
    int numTrees(int n) {
        vector<int> G(n+1, 0);
        G[0] = 1;
        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];
    }
};

 

おすすめ

転載: blog.csdn.net/weixin_44566432/article/details/113853503