回溯+剪枝(排除重复部分)

字符串的排列

http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7

public class Solution {
ArrayList<string> res = new ArrayList<>();
StringBuilder path = new StringBuilder();
boolean[] visited;
public ArrayList<string> Permutation(String str) {
if(str==null || str=="") return res;
char[] strs = str.toCharArray();
Arrays.sort(strs);
visited = new boolean[strs.length];
dfs(strs,0);
return res;
}
private void dfs(char[] strs,int depth){
if(depth==strs.length){
res.add(path.toString());
return;
}
for(int i=0;i<strs.length;i++){
if(i>0&&strs[i]==strs[i-1]&&visited[i-1]==false) continue;
if(!visited[i]){
visited[i]=true;
path.append(strs[i]);
dfs(strs,depth+1);
visited[i]=false;
path.deleteCharAt(path.length()-1);
}
}
}
}</string></string>

全部评论

相关推荐

比亚迪汽车新技术研究院 硬件工程师 总包21左右 硕士
点赞 评论 收藏
分享
勤劳的香菇求被捞求offer:满帮笔试都不给我发 似乎被卡本了
投递满帮集团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务