题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。按字典序打印出该字符串中字符的所有排列。
分类:字符串
解法1:遍历确定每个位置,对于abc,例如对于第一个位置,有abc,3种情况,一旦确定第一个位置,然后递归确定
- public ArrayList<String> Permutation(String str) {
- ArrayList<String> result = new ArrayList<String>();
- char[] chars = str.toCharArray();
- Arrays.sort(chars);
- solve(chars, 0,result);
- Collections.sort(result);
- return result;
- }
-
- void solve(char[] str,int i,ArrayList<String> result){
- if(i==str.length-1){
- StringBuilder sb = new StringBuilder(str.length);
- for(int j=0;j<str.length;j++){
- sb.append(str[j]);
- }
- for(int j=0;j<result.size();j++){
- if(result.get(j).equals(sb.toString())){
- return;
- }
- }
- result.add(sb.toString());
- }
- for(int j=i;j<str.length;j++){
- char t = str[i];
- str[i] = str[j];
- str[j] = t;
- solve(str, i+1,result);
- t = str[i];
- str[i] = str[j];
- str[j] = t;
- }
- }
原文链接 http://blog.csdn.net/crazy__chen/article/details/45115701