题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母
解析:利用回溯法及递归
代码:
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> res = new ArrayList<>();
if(str == null)
return null;
(输入,结果集,开始number)
fun(str.toCharArray(),res,0);
//字典序排序
Collections.sort(res);
return res;
}
public void fun(char[] strChar, ArrayList<String> res, int i){
if(i == strChar.length -1){
if(!res.contains(new String(strChar)))
res.add(new String(strChar));
return;
}else{
for(int j = i ; j < strChar.length; j++){
swap(strChar,i,j);
//(输入,结果集,首字母循环)
fun(strChar,res,i+1);
swap(strChar,i,j);
}
}
}
public void swap(char[] str, int i, int j){
if(i != j){
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}