有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。
示例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);//回溯}}
}