0
我正在嘗試在JavaScript中編寫一個函數,通過在itertools.permutations的Python文檔中移植code來生成給定數組的排列數組。 (我知道實際函數是用C編寫的)這就是我所擁有的,它輸出一個正確長度的數組--n!/(nr)!, n是數組的長度 - 但每個元素都是正確的原始數組,不重新排列。我會很感激一雙嶄新的眼睛對我的代碼,因爲我很爲難:JavaScript排列功能 - 爲什麼不能正常工作?
function permutations(array, r) {
if (r === undefined) r = array.length;
if (r > array.length) return;
var indices = range(array.length);
var cycles = range(array.length, array.length - r, -1);
var result = [[]];
for (var i = 0; i < r; i++) {
result[0].push(array[i]);
}
while (1) {
var exhausted = true;
for (var i = r - 1; i >= 0; i--) {
cycles[i] -= 1;
if (cycles[i] == 0) {
indices = indices.slice(0, i).concat(
indices.slice(i + 1)
).concat([indices[i]]);
cycles[i] = array.length - i;
}
else {
var j = cycles[i];
swap(indices, i, indices.length - j);
var p = [];
for (var i = 0; i < r; i++) {
p.push(array[i]);
}
result.push(p);
exhausted = false;
break;
}
}
if (exhausted) break;
}
return result;
}
最接近的等價物可能是一個生成器'函數*'並使用類似於python的'yield'關鍵字。 –