我正在尝试使用生成器逐个获取数组的所有排列。
这是原始代码(按预期工作并返回排列数组),下面是我尝试更改它的代码:
例如,对于
然而,使用原始代码我得到了一个排列的数组:
这是原始代码(按预期工作并返回排列数组),下面是我尝试更改它的代码:
function permutations(iList, maxLength) {
const cur = Array(maxLength)
const results = []
function rec(list, depth = 0) {
if (depth === maxLength) {
return results.push(cur.slice(0))
}
for (let i = 0; i < list.length; ++i) {
cur[depth] = list.splice(i, 1)[0]
rec(list, depth + 1)
list.splice(i, 0, cur[depth])
}
}
rec(iList)
return results
}
我的代码,没有返回任何内容:
function* permutations2(iList, maxLength) {
const cur = Array(maxLength)
function* rec(list, depth = 0) {
if (depth === maxLength) {
yield cur.slice(0)
}
for (let i = 0; i < list.length; ++i) {
cur[depth] = list.splice(i, 1)[0]
rec(list, depth + 1)
list.splice(i, 0, cur[depth])
}
}
yield rec(iList)
}
例如,对于
print(permutations2([1, 2, 3], 2))
,我想要得到[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 1]
[3, 2]
然而,使用原始代码我得到了一个排列的数组:
[[1, 2],
[1, 3],
[2, 1],
[2, 3],
[3, 1],
[3, 2]]
我很希望能够理解为什么我的代码不能运行,以及如何修复它。 谢谢!