我有一种类似于here的方法,但是,在我的代码片段中,我似乎耗尽了2或3个字符的字符串。
这是一个实施问题吗?或者我需要在这里优化我的代码吗?
function swap(string, a_id, b_id){
var swapped = new String();
for (var i = 0; i < string.length; i++){
if (i == a_id)
swapped += string[b_id];
else if (i == b_id)
swapped += string[a_id]
else
swapped += string[i];
}
return swapped;
}
function permute(index, string){
if (index == (string.length -1)){
console.log(string);
}
else{
for (var i = index; i <= string.length-1; i++){
string = swap( string, i, index );
permute( i, string );
string = swap(string, i, index ); // undo it for the next iteration
}
}
}
permute(0, "AB");
答案 0 :(得分:1)
我注意到您的实施中存在1个问题
在permute中permute( i, string );
,不是修改i
值,意味着它必须减少,我以某种方式估计,在循环中某处停止递归。
当我看到你linked的实际实现时,发现很难理解逻辑。
String.prototype.replaceAt=function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length);
}
//get new string
function swap(string, leftIndex, iIndex) {
//console.log(string);
var charAtL = string.charAt(leftIndex);
var charAtI = string.charAt(iIndex);
string = string.replaceAt(leftIndex, charAtI);
string = string.replaceAt(iIndex, charAtL);
return string;
}
function permute(string, leftIndex, rightIndex) {
if (leftIndex == rightIndex) {
console.log(string);
} else {
for(var i = leftIndex; i <= rightIndex; i++) {
string = swap(string, leftIndex, i);
permute(string, leftIndex + 1, rightIndex);
string = swap(string, leftIndex, i);
}
}
}
permute("ABC", 0, 2);
我只是重写了整个程序,并且工作正常。检查控制台是否有所有排列值。
这是工作fiddle。