-47の特別なバックトラックLeetcode。全順列II(順列II)
一連の数字を考えると、繰り返しが含まれるすべての明確な完全な配列を返すことがあります。
例:
入力:[1,1,2] 出力: [ [1,1,2]、 [1,2,1]、 [2,1,1] ]
分析:46個の質問のように、いくつかの制限を追加しました(それは)重複した数字が含まれています。
ACコード(時間複雑度は、2つの将来の改善ブラシ比較的高いです)。
クラスのソリューション{ リスト <リスト<Integer型>> ANS = 新しい ArrayListを<> (); int型 VIS [] = ヌル; 公衆リスト<リスト<整数>> permuteUnique(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.contains(TMP)= 真){ 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 ; } } }