[オファー] [38]文字列[IN]配列

タイトル説明

  文字列の入力は、文字列のすべての順列を出力します。例えば、入力された文字列abc、ABC文字A、B、C、ACB、BAC、BCA、CABとCBAによって注文することができ、すべての文字列を印刷します。
  

牛が質問がネットワークに対処はねのけます

アイデア解析

  二つの部分、などの文字列最初の部分の最初の文字の位置の、第二の部分の残りの文字は、次いで、この操作は、文字列を必要とする2つのステップに分けることができる:
  需要は、第1の部分で発生することがあり1最初の文字の位置は、それが最初の文字との交換以下のすべての文字で
  、元の質問に行きまし配置、の文字の後ろ2.需要。あなたは再帰を使用することができます。

テストケース

  1. 機能テスト:一つ以上の文字を入力文字列。
  2. 特別な入力テスト:入力文字列の内容が空またはnullptrポインタです。

Javaコード

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
おすすめ