有重復字符串全排列


題目描述

輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。 
import java.util.*;

public class Solution {
    public static ArrayList<String> Permutation(String str) {
        if(str == null)
            return null;
        ArrayList<String> list = new ArrayList<>();
        char[] chars = str.toCharArray();
        list = allSort(chars, 0, list);
        Collections.sort(list);
        return list;
    }

    public static ArrayList<String> allSort(char[] chars, int index, ArrayList<String> list){
        if(index == chars.length-1){
            list.add(String.valueOf(chars));
            return list;
        }
        for(int i=index; i< chars.length; i++){
            if(i != index && chars[i] == chars[index])//當要交換的值相同時
                continue;
            exChangeChars(index, i, chars); //修改第一個與后面的位置
            allSort(chars,index+1,list);
            exChangeChars(index, i, chars);//修改成原來的數組
        }

        return list;
    }
    /**
     * 交換兩個字符數組的位置
     * @param index1
     * @param index2
     * @param chars
     */
    public static void exChangeChars(int index1, int index2, char[] chars){
        char tmp =chars[index1];
        chars[index1] = chars[index2];
        chars[index2] = tmp;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM