输入一个字符串,长度不超过9(可能有字符重复),按字典序打印出该字符串中字符的所有排列。

import java.util.ArrayList;
import java.util.TreeSet;
public class Solution {
    public ArrayList<String> Permutation(String str) {
           ArrayList<String> result = new ArrayList<String>();
        if(str != null && str.length() > 0){
            TreeSet<String> res = new TreeSet<String>();
            process(str.toCharArray(), 0, res);
            result.addAll(res) ;
        }
        return result;
    }
    
    public void process(char[] str,int i,TreeSet<String> list){
        if(i == str.length-1){
            String val = String.valueOf(str);
            if(!list.contains(val)){
                list.add(val);
            }
        }else{
            for(int j=i; j<str.length; j++){
                swap(str,i,j);
                process(str, i+1, list);
                swap(str,i,j);
            }
        }
    }
    
    public void swap(char[] str,int i,int j){
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}

 

posted @ 2020-10-22 16:44  云飞扬-88  阅读(184)  评论(0编辑  收藏  举报