-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] 
] 

분석 : 힘 배열을 역행, 역행을 사용 여부를 나타내는 선택된 번호, 예컨대 힘 [1] = 1 첨자 (1)의 선택된 수를 나타내는.

AC 코드 :
클래스 해결 { 
목록 <일람 <정수 >> ANS = 새로운 ArrayList를 <> ();
    int로 힘 [= 널을 ;
    공개 목록 <일람 <정수 >> 교환하다 ( INT [] nums) {  = 새로운  INT [nums.length]; 
        Arrays.fill (마주, 0 ); 
        DFS (nums, 0, 새로운 ArrayList에 <정수> ()); 
        
        반환 ANS를; 
    } 
    
    공공  공극 DFS ( INT의 nums [], INT의 위치의 ArrayList <정수> TMP) {
         만약(위치> nums.length-1 ) {
             경우 (tmp.size () == nums.length) { 
                ans.add ( 새로운 ArrayList를 <> (TMP)); 
            } 
            반환 ; 
        } 
        
        
        에 대해 ( int로 , 나는 nums.length를 <; I = 0 난 ++ ) {
             경우 (힘 [I] == 1) 계속 ; 
            
            힘 [I] = 1 ; 
            tmp.add (nums [I]); 
            DFS (nums 위치 +1 , TMP); 
            tmp.remove (tmp.size () -1 ); 
            힘 [I] = 0 ; 
        }
        
        
        
    } 
}

 

추천

출처www.cnblogs.com/qinyuguan/p/11324789.html