private ArrayList<String> res;
private boolean[] visited;
public ArrayList<String> Permutation(String str) {
res = new ArrayList<>();
if(str==null || str.length()==0){
return res;
}
char[] chs = str.toCharArray();
Arrays.sort(chs); //方便后面的去重处理
visited = new boolean[str.length()];
permute(chs,0,new StringBuilder());
return res;
}
//产生排列
//p中保存一个存在index个元素的排列
//向这个排列的末尾添加第(index+1)个元素,获得包含(index+1)个元素的排列
private void permute(char[] chs,int index,StringBuilder p){
if(index==chs.length){
res.add(p.toString());
return;
}
for(int i=0;i<chs.length;i++){
//需要进行去重处理
if(i>0 && chs[i-1]==chs[i] && !visited[i-1]){
continue;
}
if(!visited[i]){
p.append(chs[i]);
visited[i] = true;
permute(chs,index+1,p);
p.deleteCharAt(p.length()-1);
visited[i] = false;
}
}
}
https://www.mianshi.online,https://www.i9code.cn
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。