我正在处理 CodeWars.com 上的一些“Kata”,并被困在 Permutations 问题上。
这是问题所在:在这个 kata 中,您必须创建输入字符串的所有排列并删除重复项(如果存在)。这意味着,您必须以所有可能的顺序对输入中的所有字母进行洗牌。
例子:
permutations('a'); // ['a'] permutations('ab'); // ['ab', 'ba'] permutations('aabb'); // ['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']
排列的顺序无关紧要。
这是我的解决方案:
function permutations(string) {
const swap = (string, x, y) => {
const stringArray = string.split('')
const swapVar = stringArray[x]
stringArray[x] = stringArray[y]
stringArray[y] = swapVar
return stringArray.join('')
}
const permutate = (k, arr) => {
if (k === 1) {
return arr
} else {
for (let i = 0; i < k - 1; i++) {
if (k % 2 === 0) {
arr.push(swap(string, i, k-1))
} else {
arr.push(swap(string, 0, k-1))
}
}
permutate(k - 1, arr)
}
}
return permutate(string.length, [string])
}
当你传入一个字母时,它工作正常。两个字母,它返回undefined
。我已经使用 return 控制台记录了 if 语句块,它应该返回正确的答案,但结果仍然是undefined
. 考虑到它在 if 语句中得到了正确的答案并且没有进入 else 块,我不知道为什么这不起作用。
先感谢您!