제목 설명
문자열 입력 문자열에서 문자의 모든 순열을 출력합니다. 예를 들어, 입력 문자열 ABC를 들어, ABC 문자 A, B, C, ACB, BAC, BCA, CBA 및 택시에 의해 지시 될 수있는 모든 문자열을 출력한다.
아이디어 분석
두 부분으로하는 문자열은, 제 1 부분 의 첫 번째 문자의 위치는, 제 2 부분 : 나머지 문자가, 그 후,이 작업은 문자열 두 단계로 분할 될 수 있어야
1. 수요가 상기 제 1 부분에서 발생할 수있는 첫 번째 문자의 위치, 즉 첫 번째 문자 및 교환 다음에 오는 모든 자
다시 원래의 질문에 갔다 배열의 문자 뒤에 2. 수요. 당신은 재귀를 사용할 수 있습니다.
테스트 케이스
- 기능 시험 : 하나 개 이상의 문자 입력 문자열.
- 특별 입력 테스트 : 입력 문자열의 내용이 비어 있거나 nullptr 포인터이다.
자바 코드
public class Offer38 {
public static void main(String[] args) {
test1();
test2();
test3();
}
public ArrayList<String> Permutation(String str) {
return Solution1(str);
}
private static ArrayList<String> Solution1(String str) {
ArrayList<String> list = new ArrayList<String>();
if(str==null || str.length()==0){
return list;
}
permutationCore(str.toCharArray(),0,list);
Collections.sort(list);
return list;
}
private static void permutationCore(char[] array,int index,ArrayList<String> list){
if(index == array.length-1){
if(!list.contains(String.valueOf(array))){
list.add(String.valueOf(array));
}
}else{
for(int i=index;i<array.length;i++){
char tmp = array[index];
array[index] = array[i];
array[i] = tmp;
permutationCore(array,index+1,list);
array[i]=array[index];
array[index] = tmp;
}
}
}
private static void test1() {
}
private static void test2() {
}
private static void test3() {
}
}