-46の特別なバックトラックLeetcode。全配列(順列)
与えられた数字の配列は、完全な順列にすべての可能なリターンを繰り返されていません。
例:
入力:[1,2,3] 出力 : [ [1,2,3]、 [1,3,2]、 [2,1,3]、 [2,3,1]、 [3,1,2 ] [3,2,1] ]
分析:VISアレイをバックトラック、バックトラックを用いて示すかどうか、選択された数、例えばVIS [1] = 1添字1の選択された数を表します。
ACコード:
クラスのソリューション{ リスト <リスト<Integer型>> ANS = 新しい ArrayListを<> (); int型 VIS [] = ヌル; 公衆リスト<リスト<整数>>並び替える(INT [] NUMS){ VIS = 新しい INT [nums.length]。 Arrays.fill(VIS、 0 ); DFS(NUMS、 0、新しいのArrayList <Integer型> ()); 戻るANSを。 } 公共 ボイド DFS(int型 NUMS []、INT位置、のArrayList <整数> TMP){ もし(位置> nums.length-1 ){ 場合(tmp.size()== nums.length){ ans.add(新規のArrayList <> (TMP))。 } を返します。 } のために(int型 i = 0; iがnums.lengthを<; Iは++ ){ 場合(VIS [I] == 1)続けます。 VIS [I] = 1 。 tmp.add(NUMS [I])。 DFS(NUMS、位置 +1 、TMP)。 tmp.remove(tmp.size() -1 )。 VIS [I] = 0 ; } } }