题解 | #字符串的排列#
字符串的排列
http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7
递归的方式
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> res = new ArrayList<>();
if(str != null){
pailie(str.toCharArray(),0,res);
//对结果排序
Collections.sort(res);
}
return res;
}
//递归全排列
public void pailie(char[] c,int i,ArrayList<String> res){
//set去重复
Set<Character> s = new HashSet<>();
if(i == c.length - 1){
res.add(String.valueOf(c));
}else{
for(int j = i;j<c.length;++j){
if(!s.contains(c[j])){
s.add(c[j]);
swap(c,i,j);
pailie(c,i+1,res);
swap(c,j,i);
}
}
}
}
//交换
public void swap(char[] c,int i,int j){
char flag = c[i];
c[i] = c[j];
c[j] = flag;
}
}