题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
示例1
输入
“ab”
返回值
[“ab”,“ba”]
在线链接
代码:
import java.util.*;
public class Solution {
ArrayList<String> list = new ArrayList<>();
public ArrayList<String> Permutation(String str) {
if(str == null || str.length() == 0){
return list;
}
char[] ch = str.toCharArray();
help(ch,0);
Collections.sort(list);
return list;
}
private void help(char[] ch,int i) {
if(i == ch.length){
list.add(new String(ch));
}
Set<Character> set = new HashSet<>();
for (int j = i; j < ch.length; j++) {
if(!set.contains(ch[j])){
set.add(ch[j]);
swap(ch,i,j);
help(ch,i+1);
swap(ch,i,j);
}
}
}
private void swap(char[] ch,int i,int j) {
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}
思路概述:
本题为全排列,因为有重复元素,注意使用一个set去重。