题解 | #全排列#
全排列
https://www.nowcoder.com/practice/b3ac35e1569e4601b6d3957dd337e70b
const _permute = string => {
if(string.length ===1) return [string]
const result =[]
for(let s of string){
//拆解字符串,然后递归返回唯一的元素
const arr = string.split('').filter(str=>str!==s)
const permutations = _permute(arr.join(''));
permutations.forEach((item) => {
result.push(s + item);
})
}
return result
}
- 首先,检查输入的字符串 string 的长度是否为 1。如果是,则直接将该字符串作为结果数组的一项返回。
- 如果字符串长度大于 1,则创建一个空的数组 result,用于存储最终的全排列结果。
- 接下来,使用 for..of 循环遍历字符串中的每个字符 s。
- 在循环内部,通过拆解字符串并过滤掉当前字符 s,得到剩余字符组成的数组 arr。这样可以确保在递归调用时,传入的参数是正确的。
- 然后,对剩余字符数组 arr 进行递归调用 _permute(arr.join(''))。这会返回一个包含剩余字符的所有排列组合的数组,命名为 permutations。
- 使用 forEach 循环遍历 permutations 数组中的每个元素 item。
- 对于每个元素 item,将当前字符 s 与 item 拼接起来,并将结果添加到 result 数组中。
- 循环结束后,返回结果数组 result,其中包含了所有可能的全排列组合。
字节跳动公司福利 1381人发布