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]。 } } } 戻り櫛[ターゲット]。 } }