输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
import java.util.ArrayList;
import java.util.TreeSet;
public class Solution {
/**
* dfs获取到所有的排列组合,可以选择用TreeSet,进行自动排序,并去重
*/
boolean[] tag = new boolean[20];
TreeSet<String> resultSet = new TreeSet<>();
public ArrayList<String> Permutation(String str) {
ArrayList<String> resultList = new ArrayList<>();
if (str == null || str.length() == 0) {
return resultList;
}
dfsString(str, new StringBuilder());
for (String eachString : resultSet) {
resultList.add(eachString);
}
return resultList;
}
public void dfsString(String s, StringBuilder eachResult) {
if (s.length() == eachResult.length()) {
resultSet.add(eachResult.toString());
return;
}
for (int i = 0; i < s.length(); ++i) {
if (tag[i] == false) {
eachResult.append(s.charAt(i));
tag[i] = true;
dfsString(s, eachResult);
tag[i] = false;
eachResult.delete(eachResult.length() - 1, eachResult.length());
}
}
}
}