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

字符串的排列

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>

全部评论

相关推荐

牛客吹哨人:哨哥晚点统一更新到黑名单:能救一个是一个!26届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1525833
点赞 评论 收藏
分享
09-25 00:00
已编辑
电子科技大学 Java
球球与墩墩:这不是前端常考的对象扁平化吗,面试官像是前端出来的 const flattern = (obj) => { const res = {}; const dfs = (curr, path) => { if(typeof curr === 'object' && curr !== null) { const isArray = Array.isArray(curr); for(let key in curr) { const newPath = path ? isArray ? `${path}[${key}]` : `${path}.${key}` : key; dfs(curr[key], newPath); } } else { res[path] = curr } } dfs(obj); return res; }
查看3道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务