견적 증명 안전 [32] 배열 어레이의 최소 개수

제목 설명

양의 정수 배열을 입력 함께 접합 다수 배치 모든 숫자들의 어레이는, 스플 라이스는 최소 하나의 모든 숫자를 출력 할 수있다. 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      }
해결 방법 2 개 질문 :은 compareTo ()를
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      }
해결 방법 세 가지 질문 :은, Collections.sort ()를
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

 

추천

출처www.cnblogs.com/Blog-cpc/p/12445204.html