LeetCode《程序员面试金典》面试题 08.08. 有重复字符串的排列组合

LeetCode 面试题 08.08. 有重复字符串的排列组合

  • 题目
  • 解题

题目

LeetCode《程序员面试金典》面试题 08.08. 有重复字符串的排列组合_第1张图片

解题

LeetCode《程序员面试金典》面试题 08.08. 有重复字符串的排列组合_第2张图片
LeetCode《程序员面试金典》面试题 08.08. 有重复字符串的排列组合_第3张图片

// javascript
var permutation = function(S) {
    const map = buildMap(S), result = new Array();
    getPerms(map, "", S.length, result);
    return result;
};

const buildMap = (S) => {
    const map = new Map();
    for (const char of S) {
        map.set(char, (map.get(char) || 0) + 1);
    }
    return map;
};

const getPerms = (map, prefix, remaining, result) => {
    if (remaining === 0) {
        result.push(prefix);
        return;
    }
    for (const char of map.keys()) {
        const count = map.get(char);
        if (count > 0) {
            map.set(char, count - 1);
            getPerms(map, prefix + char, remaining - 1, result);
            map.set(char, count); // 撤回
        }
    }
};

你可能感兴趣的:(程序员面试金典,字符串,回溯)