LeetCode幸せブラシタイトル三〇から六日間--96。ユニークな二分探索木

96.ユニークな二分探索木

与えられた  nは、どのように多くの構造的にユニークなBSTの(二分探索木)その店は... 1値  のn

例:

入力:3 
出力:5 
説明:
与えられたN = 3は、5つのユニークなBSTの合計がある:

   1 3 3 2 1 
    \ / / / \ \ 
     3 2 1 1 3 2 
    / / \ \ 
   2 1 2 3 
三つの方法で解決この問題:
1.C ++バージョンDPの
間違い:
* +私は大きな問題をmisused.Causeこの部分
DP [I] + = DP [J] * DP [I - 1 - J]。
 
  
する#include <stdio.hに> 
する#include <iostreamの> 
する#include < ストリング > 
の#include < 文字列・H> 
の#include <ベクトル> 
の#include < セット > 
の#include <地図> 
の#include <アルゴリズム> 
の#include <スタック> 
#含む <climits> 
の#include <unordered_map> 
する#include <ビット/ STDC ++ H>
 //
 使用して 名前空間STDを、

クラスのソリューション{
 パブリックどのように多くの木総ツリーはDP [i]のノードがある場合。
        ベクター< INT > DP(N + 1 )。
        DP [ 0 ] = DP [ 1 ] = 1 以下のためにint型 iは= 2 ; iがn + < 1 ; iは++ ){
             ためint型 J = 0 ; J <I、J ++ ){ 
                DP [i]は + = DP [J] * DP [I - 1 - J ]; 
            } 
        } 
        戻りDP [n]は、
    } 
}。


INT メイン()
{
    ソリューション1秒; 
    COUT << s.Num(5)<< ENDL。
    リターン 0 ; 
}

 DPのpythonのバージョン:

クラス溶液(オブジェクト):
    DEF numTrees(自己、N):
        DP = [ 11 ]
         のための I における範囲(2、N + 1 ):
            TMP = 0 
            のための J における範囲(I):
                TMP + = DP [J] * DP [I- 1 - J] 
            dp.append(TMP)
        戻りDP [I] 

ソル = ソリューション()
プリント(solu.numTrees(5))

 

 

 

おすすめ

転載: www.cnblogs.com/Marigolci/p/11362491.html