有重復字符串的排列組合。編寫一種方法,計算某字符串的所有排列組合。
示例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);//回溯}}
}