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