我很困惑,为什么我的代码是两次推送每个排列。请有人帮忙。我使用的堆算法:为什么我的代码两次推送每个排列?
var regex = /(.)\1+/g;
function permAlone(str) {
var newArray = str.split('');
var n = newArray.length;
var permutations = [];
var tmp;
function swap(index1, index2) {
tmp = newArray[index1];
newArray[index1] = newArray[index2];
newArray[index2] = tmp;
}
function generate(n, newArray) {
if (n === 1) {
permutations.push(newArray.join(''));
} else {
for(var i = 0; i<n-1; i++) {
generate(n-1, newArray);
swap(n % 2 ? 0 : i, n-1);
permutations.push(newArray.join(''));
}
generate(n-1, newArray);
}
}
generate(n, newArray);
return permutations;
}
permAlone('aab');
返回的数组是:
["aab", "aab", "aab", "baa", "baa", "aba", "aba", "aba", "baa", "baa"]
因此,大家可以看到,排列是出现更多的时间比预期的每一件事情。任何帮助将是巨大的
除了重复,所述第二呼叫,以产生'(N-1,newArray);'是不必要的。它只是做与循环的最后一次迭代相同的事情。 – samgak
只有一个问题:由于字符串是'aab',你是否期望两个'aab'和两个'aba' ...(因为有两个'a')或者只有一个? –
...为什么正则表达式..? – Redu