题解 | #字符串的排列#
字符串的排列
http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
public class Solution {
public void F(int depth,char[] fina,int[] used,char[] org, Set<String> set) {
if(depth==org.length){
String val = new String(fina);
set.add(val); //当长度符合时,加入set中
}
else{
for(int i = 0;i<org.length;i++){
if(used[i]!=1){
used[i]=1; //本轮已使用
fina[depth] = org[i];
F(depth+1,fina,used,org,set);
used[i]=0; //重要!结束后要放开,不影响下一轮使用
}
}
}
}
public ArrayList<String> Permutation(String str) {
ArrayList<String> list = new ArrayList<String>();
Set<String> set = new HashSet<>(); //会自动去重
if(str.length()<=0) return list;
char[] org = str.toCharArray();
char[] fina = new char[str.length()];
int used[] = new int[str.length()];
F(0,fina,used,org,set);
for(String val:set){
list.add(val);
}
return list;
}
}