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