<バックトラック>コンビネーション、DFS:216 DP:377

216コンビネーション合計III

subset.sizeを確保するためにDFSの端()== K &&ターゲット== 0時間

subset.size()> K || ターゲット<0返回。

クラスソリューション{
     パブリックリスト<リスト<整数>> combinationSum3(int型 K、INT N){ 
        リスト <リスト<整数>> RES = 新規のArrayList <> ();
        もし(K <= 0 || N <1)戻りRES。
        DFS(RES、新規のArrayList <整数>()、K、nは、1 )。
        リターンのres; 
    } 
    
    プライベート ボイド DFS(一覧<一覧<整数>> RES、一覧<整数>サブセット、INT K、INTターゲット、INT インデックス){
         場合(subset.size()> K &&を返しますもし(subset.size()== K &&ターゲット== 0 ){ 
            res.add(新規のArrayList <整数> (サブセット))。
            リターン;            
        } 
        ためINT iはインデックスを=; I <= 9; I ++ ){ 
            subset.add(I)。
            DFS(RES、サブセット、K、標的 - I、I + 1 )。
            subset.remove(subset.size() - 1 )。
        } 
    } 
}

377コンビネーション合計IV

DFS:このメソッドは、タイムアウトであります

クラスのソリューション{
     int型のカウント。
    公共 INT combinationSum4(INT [] NUMS、INT ターゲット){
         場合(NUMS == NULL || nums.length == 0)戻り 0 ; 
        DFS(NUMS、ターゲット、新しいのArrayList <Integer型> ());
        戻り値の数。
    } 
    
    プライベート ボイド DFS(INT [] NUMS、INTターゲット、一覧<整数> サブセット){
         場合(目標== 0 ){ 
            カウント ++ リターン; 
        } 
        であれば(目標<0 ){
             リターン
        } 
        ためINT iは= 0; I <nums.length; I ++ ){ 
            subset.add(NUMS [I])。
            DFS(NUMS、標的 - NUMS [i]は、サブセット)。
            subset.remove(subset.size() - 1 )。
        } 
    } 
}

DP:I - の組み合わせで前にデジタルCOMBとの組み合わせに電流をNUMSためNUMS [J]テーブル[j]は[]の目標を与え続けます。

クラスソリューション{
     公共 のint combinationSum4(INT [] NUMS、int型のターゲット){
         INT []櫛= 新しい INT [ターゲット+ 1 ]。
        櫛[ 0] = 1 ;
        以下のためにINT ; I <comb.length; iが1 = I ++ ){
             ためINT J = 0; J <nums.length; J ++ ){
                 場合(I - NUMS [j]> = 0 ){ 
                    櫛[I] + =櫛[I - NUMS [J]。
                } 
            } 
        }
        戻り櫛[ターゲット]。
    } 
}

 

おすすめ

転載: www.cnblogs.com/Afei-1123/p/11909259.html
おすすめ