题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路分析
递归的思路暂时还存在问题!!!!
代码实现
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> res = new ArrayList();
if(str == null || str.length() == 0){
return res;
}
PermutationHelper(str.toCharArray(),0,res);
Collections.sort(res);
return res;
}
private void PermutationHelper(char[] str,int n,List<String> res){
if(n == str.length){
res.add(String.valueOf(str));
}
int i = n;
for(int j = i; j < str.length; j++){
if(i != j && str[i] == str[j]){
continue;
}
swap(str,i,j);
PermutationHelper(str,i+1,res);
swap(str,i,j);
}
}
/**
* 交换字符串中的两个字符
*/
private void swap(char[] str,int i,int j){
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}