40 II-LeetCodeの和の組み合わせ

経験:主に使用後戻りや剪定、剪定は全体の条件が考える取らなければならない、または他の時間がより多くなります

重複排除は、よりエレガント、やろう設定することはできませんどのようにノートを取るために重い行く場所。

再帰的プロセス、条件が変化する中で再帰で処理することができ、コンパクトな状態を記述するようにしてください

再帰的な方法を記述し、治療に行き、コードのように、少量、そしてエレガント。

1  クラスソリューション{
 2        パブリックリスト<リスト<整数>> combinationSum2(INT []の候補、int型のターゲット){
 3             LinkedListの<リスト<整数>>リスト= 新しい LinkedListの<> ();
4              もし(候補== NULL || candidates.length == 0 5                  リターンリスト。
6              は、Arrays.sort(候補)。
7              REC(0、リスト、新しい LinkedListは<整数> ()、候補者、ターゲット)。
8              リターンリスト。
9          }
 10      公衆 ボイド REC(int型のインデックス、LinkedListの<リスト<整数>>リスト、LinkedListの<整数> TMP、INT []の候補、int型のターゲット)
 11         {
 12           であれば(目標<0 13               リターン;
14           他の 場合(目標== 0 15           {        
 16               list.add(新しいLinkedListの(TMP))。
17               リターン;
18           }
 19は、          他の
20           {
 21               のためには、int型私は=インデックスを、iが<candidates.length &&[I]は<=ターゲットに候補 ; I ++ )//この状態を改善することができるプルーニング
//速度
22である { 23は IF [I]は==に候補[!1-Iにおける(I =インデックス&&候補]) 24 続行; 25 tmp.add ([I]における候補); 26が REC(+ I. 1、リスト、TMP、で候補、標的- [I]における候補); 27 tmp.removeLast(); 28 } 29 } 30 } 31です }

 

おすすめ

転載: www.cnblogs.com/pc-m/p/10954734.html