使用递归调用的方式实现字符串的全排列,并将结果去重

    1. // 循环遍历字符串,将所有的字符放在第一位,再递归遍历剩余的字符,依次将所有的字符放在剩下字符的第一位
    2. // 当字符长度为一时,返回,然后将递归结果依次拼接 即可得到全排列 字符串
    3. function permutation (per) {
    4. if (per.length === 1) { return [per] }
    5. let res = []; // 分号是必须的
    6. // 这里使用... 扩展运算符,简单的将字符串转为数组
    7. [...per].forEach((v, i, str) => {
    8. const temp = [...str] // 为了不影响原数组,这里将数组浅拷贝了一下
    9. const header = temp.splice(i, 1)
    10. permutation(temp).forEach(value => res.push([header, ...value].join('')))
    11. })
    12. return [...new Set(res)]
    13. }
    14. permutation('abca') // ["abca", "abac", "acba", "acab", "aabc", "aacb", "baca", "baac", "bcaa", "caba", "caab", "cbaa"]