您的位置:首页 > 职场人生

leetcode面试题 08.08. 有重复字符串的排列组合(回溯)

2020-07-31 16:00 1361 查看

有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。

示例1:

输入:S = “qqe”
输出:[“eqq”,“qeq”,“qqe”]
示例2:

输入:S = “ab”
输出:[“ab”, “ba”]

代码

class Solution {
ArrayList<String> ans=new ArrayList<>();
public String[] permutation(String S) {

Map<Character,Integer> map=new HashMap<>();
for(char c:S.toCharArray()) map.put(c,map.getOrDefault(c,0)+1);//记录字符及其出现的次数
per(map,new char[S.length()],0,S);
return ans.toArray(new String[ans.size()]);
}
public void per( Map<Character,Integer> map,char[] temp,int loc,String S) {

if(loc==S.length()) {//满足情况
ans.add(String.valueOf(temp));
return;
}

for(char c:map.keySet())
{
if(map.get(c)<1) continue;//这个字符没有余量了
map.put(c,map.get(c)-1);
temp[loc]=c;
per(map, temp, loc+1,S);
map.put(c,map.get(c)+1);//回溯
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: