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

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

示例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);//回溯
        }

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44560620/article/details/107715400