문자열 배열 [있음] [쿠폰] [38]

제목 설명

  문자열 입력 문자열에서 문자의 모든 순열을 출력합니다. 예를 들어, 입력 문자열 ABC를 들어, ABC 문자 A, B, C, ACB, BAC, BCA, CBA 및 택시에 의해 지시 될 수있는 모든 문자열을 출력한다.
  

소가 질문에 대한 네트워크를 해결 털어

아이디어 분석

  두 부분으로하는 문자열은, 제 1 부분 의 첫 번째 문자의 위치는, 제 2 부분 : 나머지 문자가, 그 후,이 작업은 문자열 두 단계로 분할 될 수 있어야
  1. 수요가 상기 제 1 부분에서 발생할 수있는 첫 번째 문자의 위치, 즉 첫 번째 문자 및 교환 다음에 오는 모든 자
  다시 원래의 질문에 갔다 배열의 문자 뒤에 2. 수요. 당신은 재귀를 사용할 수 있습니다.

테스트 케이스

  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() {

    }

}

코드 링크

안전 코드를 증명하는 행사는 -Java

추천

출처www.cnblogs.com/haoworld/p/offer38-zi-fu-chuan-de-pai-lie.html