我正在尝试编写一个执行以下操作的函数:
下面的函数(我在网上找到)通过将一个字符串作为参数,然后返回该字符串的所有排列来完成此操作
我无法弄清楚如何修改它以使其与整数数组一起使用(我认为这与某些方法在字符串上的工作方式不同于它们在整数上的工作方式有关,但我不确定. ..)
var permArr = [], usedChars = [];
function permute(input) {
var i, ch, chars = input.split("");
for (i = 0; i < chars.length; i++) {
ch = chars.splice(i, 1);
usedChars.push(ch);
if (chars.length == 0)
permArr[permArr.length] = usedChars.join("");
permute(chars.join(""));
chars.splice(i, 0, ch);
usedChars.pop();
}
return permArr
};
Run Code Online (Sandbox Code Playgroud)
注意:我希望使函数返回整数数组,而不是字符串数组.
我真的需要使用JavaScript的解决方案.我已经在python中找到了如何做到这一点
我正在做某种蛮力攻击来解决问题.理论上它是一个有效的解决方案,它确实是,但它需要相当长的时间.
我有7个嵌套for循环,但我只需要'for variables'的组合,其中没有重复.因此,例如允许1,2,3,4,5,6,7,但应忽略1,1,3,4,5,6,7.我目前正在使用一个函数来检查数组中的重复项:
http://www.groggyjava.tv/freebies/duplicates.html
但是我想我会离开,如果我能马上忽视这些组合,而不是反复使用该功能更好的每一个组合.现在我正在评估14 ^ 7 = 105.413.504组合,但只有14 nPr 7 = 17.297.280组合是必要的.
我的代码当前是(其中hgd是重复的测试函数,如果没有重复,则返回true):
for(var a=0;a<14;a++) {
for(var b=0;b<14;b++) {if(hgd([a,b])) {
for(var c=0;c<14;c++) {if(hgd([a,b,c])) {
for(var d=0;d<14;d++) {if(hgd([a,b,c,d])) {
for(var e=0;e<14;e++) {if(hgd([a,b,c,d,e])) {
for(var f=0;f<14;f++) {if(hgd([a,b,c,d,e,f])) {
for(var g=0;g<14;g++) {if(hgd([a,b,c,d,e,f,g])) {
check([a,b,c,d,e,f,g]);
}}
}}
}}
}}
}}
}}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能让这个更快,是否有另一个解决方案而不是循环?
谢谢.
如何在javascript中创建一个单词的所有可能字谜列表?如果已经问过这个问题,请指导我找到答案?
谢谢