-46の特別なバックトラックLeetcode。全配列(順列)

-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 ; 
        }
        
        
        
    } 
}

 

おすすめ

転載: www.cnblogs.com/qinyuguan/p/11324789.html