题解 | #字符串的排列#
字符串的排列
http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> ans = new ArrayList<>();
char[] ch = str.toCharArray();
Arrays.sort(ch);
boolean[] visited = new boolean[ch.length];
Arrays.fill(visited,false);
callBack(ans,new String(),visited,ch);
return ans;
if(path.length() == ch.length){
ans.add(path);
return;
}
for(int i = 0;i<ch.length;i++){
if(visited[i]){
continue;
}
if(i>0 && ch[i] == ch[i-1]&&!visited[i-1]){
continue;
}
path = path + ch[i];
int length = path.length();
visited[i] = true;
callBack(ans,path,visited,ch);
visited[i] = false;
path = path.substring(0,length-1);
}
}
}
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> ans = new ArrayList<>();
char[] ch = str.toCharArray();
Arrays.sort(ch);
boolean[] visited = new boolean[ch.length];
Arrays.fill(visited,false);
callBack(ans,new String(),visited,ch);
return ans;
}
//回溯算法
public void callBack(ArrayList<String> ans,String path,boolean[] visited,char[] ch){
ans.add(path);
return;
}
for(int i = 0;i<ch.length;i++){
if(visited[i]){
continue;
}
if(i>0 && ch[i] == ch[i-1]&&!visited[i-1]){
continue;
}
path = path + ch[i];
int length = path.length();
visited[i] = true;
callBack(ans,path,visited,ch);
visited[i] = false;
path = path.substring(0,length-1);
}
}
}