题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
题解
import java.util.ArrayList;
import java.util.Comparator;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> list = new ArrayList<String>();
if(str == null || str.length() == 0)
return list;
char[] c = str.toCharArray();
list = getAllString(c, 0, c.length-1);
list.sort(new Comparator<String> () {
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
return list;
}
public ArrayList<String> getAllString(char[] c, int low, int high) {
ArrayList<String> res = new ArrayList<String>();
if(low == high) {
String s = String.valueOf(c[low]);
res.add(s);
return res;
}
for(int i=low;i<=high;i++) {
if(i == low || c[i] != c[low]) {
swap(c, low, i);
ArrayList<String> temp = getAllString(c, low+1, high);
for(String s : temp) {
res.add(c[low] + s);
}
swap(c, low, i);
}
}
return res;
}
public void swap(char[] c, int i, int j) {
char t = c[i];
c[i] = c[j];
c[j] = t;
}
}