제목 설명
양의 정수 배열을 입력 함께 접합 다수 배치 모든 숫자들의 어레이는, 스플 라이스는 최소 하나의 모든 숫자를 출력 할 수있다. 3,32,321 입력 어레이} {예를 들어, 세 개의 숫자의 최소 수는 321,323으로 배치 될 수 인쇄.
문제에 대한 해결책 : DFS
1 개 // 저장소 번째 사이클 번호를 이송 2 개인 정적 INT []를 nums 단계; . 3 // 플래그가 이송되어, 0, 그렇지 않으면 1 이송있다 4. 개인 정적 정수 [] 예약] . 5 // 결과에 중량 6. 개인 정적 HashSet의 <문자열> 결과 = 새로운 새 HashSet의 <문자열> () . 7 공용 정적 스트링 PrintMinNumber ( INT [] 번호) { 8. ArrayList를 <문자열> 목록 = 새로운 새로운 ArrayList를 <문자열> () . 9 IF (번호. 길이 == 0 ) { 10 리턴 널 ] . 11 } 12은 nums = 새로운 새 INT [numbers.length] (13)가 예약 = 새로운 새로운 정수 [numbers.length] 14 // 스토리지 어레이 디폴트 널 아닌 0 정수형 때문에 초기화 취소 15 대 ( INT는 0 = I, I <book.length는, I는 ++ ) { 16 예약 [I]는 = 0 ; 17. } (18)는 (0 번호 DFS ) . 19 list.addAll (결과), 20은 은, Collections.sort (목록) (21)는 INT 크기 = 는 list.size (); 22 대 ( INT I = 0; I <크기; 나는 ++ ) { 23 에서 System.out.println (list.get (I)); 24 } 25 리턴 list.get (0 ); 26 } 27 개인 정적 공극 DFS ( INT [] 도착, INT의 공정) { 28 일 경우 (스텝 == arr.length) { 29 문자열 STR = "" ; 30 대 ( INT I = 0; I <nums.length; 내가 ++ ) { 31 STR + = nums [I]; 32 } 33된다 (STR) result.add, 34는 창 , 35 } 36 // 전체 순서를 반복 할 가능한 모든 시도하는 37 대 ( INT I = 0; I <arr.length; I ++ ) { 38 인 IF (도서 [I] =를 = 0 ) { 39 nums [STEP = ARR [I] 40 도서 [I] = 1이다. ] (41)가 DFS (ARR ,. 1 + STEP ) (42)는 예약 [I]가 = 0 ; 43이다 } 44이다 } 45 }
1 공용 정적 스트링 PrintMinNumber01 ( INT [] 참조) { 2 Arrays.sort에 (번호); 3 문자열 ANS = "" ; 4 대 ( INT의 NUM : 숫자) { 5 ANS = (ANS + NUM) .compareTo (NUM + ANS) <0? (ANS + NUM) (NUM + ANS); 6 } 7 복귀 ans와; 8 }
1 공용 정적 스트링 PrintMinNumber02 ( INT [] 참조) { 2 INT LEN = numbers.length; 3 문자열의 = "" ; 도 4 의 ArrayList <정수> = 목록은 새 의 ArrayList를 <> (); 5 대 ( INT는 I = 0; I <LEN; I ++ ) { (6) 에는 list.add (번호 [I]); 7 } 8 // 集合类工具은, Collections.sort (목록 <T> 목록, 비교기 <? 슈퍼 T> C)对列表进行排序 (9) 은, Collections.sort (목록, 새로운 비교기 <정수> () { 10 @Override 11 공용 INT 비교 (정수 STR1, STR2 정수) { 12 문자열 STR1 S1 = + ""+ STR2; 13 문자열 STR2 S2 = + ""+ STR1; 14 창 s1.compareTo (S2); 15 } 16 }); 17 대 ( INT J리스트) { 18 (S) + = J; 19 } 20 리턴 S; 21 }
테스트 :
1 공용 정적 무효 메인 (문자열 []에 args) { 2 INT [] = {NUM 3,32,321 }; 3 문자열 printMinNumber = PrintMinNumber02 (NUM); 4 에서 System.out.println (printMinNumber); 5 } 6输出: 321,323