剑指offer (java)

27.输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

//使用全排列+容器排序的方法
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Solution {
    public ArrayList<String> Permutation(String str) {
       List<String> list = new ArrayList<>();
        char[] ch = str.toCharArray();
        if(str!=null&&str.length()!=0){
            PermutationHelper(ch,0,list);
            Collections.sort(list);
        }
        return (ArrayList)list;
    }
//全排列:递归+回溯法
    public void PermutationHelper(char[] ch,int i,List<String> list){
        if(i==ch.length-1){
            String var = String.valueOf(ch);
            if(!list.contains(var)){
                list.add(var);
            } 
            return;
        }else{
            for(int j=i;j<ch.length;j++){
                swap(ch,i,j);
                PermutationHelper(ch,i+1,list);
                swap(ch,i,j);
            }
        }
    }
    void swap(char[]ch,int i,int j){
        char temp;
        temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
    }
}

猜你喜欢

转载自www.cnblogs.com/programmerzx/p/12292483.html