题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
这题一开始忽视了要按字母顺序打印。不百度真的记不住char[]转String、Arrays.sort、substring()等细节~
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> ret = new ArrayList<>();
if(str==null){
return ret;
}
if(str.length()==1){
ret.add(str);
return ret;
}
//题目要求按字母顺序打印,需先排序
str = strSort(str);
Set<Character> set = new HashSet<>();
for(int i=0; i<str.length(); i++){
if(set.contains(str.charAt(i))){
continue;
}
set.add(str.charAt(i));
StringBuffer sb = new StringBuffer(str);
char head = sb.charAt(i);
sb.setCharAt(i,str.charAt(0));
ArrayList<String> list = Permutation(sb.substring(1,sb.length()));
for(String s: list){
ret.add(head+s);
}
}
return ret;
}
public String strSort(String str){
char[] chars = str.toCharArray();
Arrays.sort(chars);
return String.valueOf(chars);
}
}
网友评论