无重复字符串的排列组合
小于 1 分钟
无重复字符串的排列组合
编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。
示例
输入:S = "qwe"
输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]
/**
* @param {string} S
* @return {string[]}
*/
var permutation = function(S) {
const arr = [...S]
const length = arr.length
const result = []
function travel(str, strArr = arr, deep = 0){
if(deep === length){
result.push(str)
return
}
// 每次将一个字符取出,留下剩余字符数组,并记录深度
strArr.forEach((item, index, array) => {
travel(str + item, array.filter((a) => a !== item), deep+1)
})
}
travel('')
return result
};
感觉deep这个概念好像不好理解,换个思路来实现上面的代码
var permutation = function(S) {
const arr = [...S]
const result = []
// 参数是:用掉的字符,剩余字符组成的数组
function travel(str, strArr){
if(str.length === S.length){
result.push(str)
return
}
// 每次将一个字符取出,留下剩余字符数组
strArr.forEach((item, index, array) => {
travel(str + item, array.filter((a) => a !== item))
})
}
travel('', arr)
return result
};