Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个包含所有唯一的4位数字的数组,这些数字可以由JavaScript中的数字1-9生成_Javascript_Combinations_Permutation - Fatal编程技术网

创建一个包含所有唯一的4位数字的数组,这些数字可以由JavaScript中的数字1-9生成

创建一个包含所有唯一的4位数字的数组,这些数字可以由JavaScript中的数字1-9生成,javascript,combinations,permutation,Javascript,Combinations,Permutation,我的任务是创建一个所有排列的数组/4位数的给定数字数组:[1,2,3,4,5,6,7,8,9]。数字不能重复,因为每个值必须是唯一的。下面是我的解决方案,但我正在努力将递归应用到流程中。我希望它是可适应的,因此如果条件发生变化,即该函数必须生成5位数字甚至6位数字的所有组合,因为只需更改很少的代码,添加递归将很容易做到这一点。正如您在下面看到的,代码确实有效,但如果条件发生变化,则需要更多嵌套for循环我正在寻找递归解决方案。这似乎不是一个好的解决方案,但任何建议都将不胜感激。我在网上看到了很多

我的任务是创建一个所有排列的数组/4位数的给定数字数组:[1,2,3,4,5,6,7,8,9]。数字不能重复,因为每个值必须是唯一的。下面是我的解决方案,但我正在努力将递归应用到流程中。我希望它是可适应的,因此如果条件发生变化,即该函数必须生成5位数字甚至6位数字的所有组合,因为只需更改很少的代码,添加递归将很容易做到这一点。正如您在下面看到的,代码确实有效,但如果条件发生变化,则需要更多嵌套for循环我正在寻找递归解决方案。这似乎不是一个好的解决方案,但任何建议都将不胜感激。我在网上看到了很多关于创建4P4或5P5而不是9P5类型的解决方案的内容。我试图应用希普的算法,但没有成功

function arrayCreate((availableNumbers, userNumberArray)) {

var possibleValues = []; //empty array to house all the possible combination of values that the user could enter i.e. 1234 to 9876
var numberOfPermutations = (factorial(availableNumbers.length) / factorial(availableNumbers.length - userNumberArray.length));

var adding = true;
var firstDigit, secondDigit, thirdDigit, forthDigit =0;
var possibleDigitValue = "";


while (adding === true) {
    for (var i = 0; i < availableNumbers.length; i++) {
        firstDigit = availableNumbers[i];
        availableNumbers.splice(i, 1);
        for (var j = 0; j < availableNumbers.length; j++) {
            secondDigit = availableNumbers[j];
            availableNumbers.splice(j, 1);
            for (var k = 0; k < availableNumbers.length; k++) {
                thirdDigit = availableNumbers[k]
                availableNumbers.splice(k, 1);
                for (var l = 0; l < availableNumbers.length; l++) {
                    forthDigit = availableNumbers[l];
                    possibleDigitValue = (firstDigit + secondDigit + thirdDigit + forthDigit);
                    possibleValues.push(possibleDigitValue);
                }
                availableNumbers.splice(k, 0, thirdDigit);
            }
            availableNumbers.splice(j, 0, secondDigit);
        }
        availableNumbers.splice(i, 0, firstDigit);
        if (possibleValues.length >= numberOfPermutations) {
            adding = false;
        }
    }
    console.log(possibleValues);
    return possibleValues;
}
}
arrayCreate([1,2,3,4,5,6,7,8,9],[0,0,0,0]);
函数arrayCreate((可用枚举数,userNumberArray)){
var possibleValues=[];//空数组,用于容纳用户可以输入的所有可能的值组合,即1234到9876
var numberOfPermutations=(factorial(availableNumbers.length)/factorial(availableNumbers.length-userNumberArray.length));
var加法=真;
var第一位数字、第二位数字、第三位数字、forthDigit=0;
var possibleDigitValue=“”;
while(添加===true){
对于(变量i=0;i=numberOfPermutations){
加法=假;
}
}
console.log(可能值);
返回可能的值;
}
}
数组创建([1,2,3,4,5,6,7,8,9],[0,0,0,0]);
var userNumberArray=['0','0','0','0']//0的空数组由于不允许此值,此数组将存储计算机自动生成的编号
var availableEnumbers=['1','2','3','4','5','6','7','8','9']//要拾取并添加到computerNumber数组的可用数字数组
//此函数稍后用于计算用户猜测组合的可能排列
函数阶乘(x){
如果(x==0){返回1;}
否则{
返回x*阶乘(x-1);
}
}
函数arrayCreate(可用枚举数,userNumberArray){
var possibleValues=[];//空数组,用于容纳用户可以输入的所有可能的值组合,即1234到9876
var numberOfPermutations=(factorial(availableNumbers.length)/factorial(availableNumbers.length-userNumberArray.length));
var加法=真;
var第一位数字、第二位数字、第三位数字、forthDigit=0;
var possibleDigitValue=“”;
while(添加===true){
对于(变量i=0;i=numberOfPermutations){
加法=假;
}
}
返回可能的值;
}
}

log(arrayCreate(AvailableEnumbers,userNumberArray))您可以通过迭代项目并检查之前是否选择了该项目来采用递归方法。如果没有,则获取该项目并检查零件阵列的长度

如果具有所需的长度,则将零件数组放入结果中

如果不是,则迭代给定数组并移交零件数组

函数arrayCreate(数组,大小){
var结果=[];
数组.forEach(函数iter(部分){
返回函数(v){
var-temp=零件浓度(v);
if(第(五)部分){
返回;
}
如果(温度长度===尺寸){
结果:推送(温度);
返回;
}
forEach(iter(temp));
}
}([]));
返回结果;
}
log(arrayCreate([1,2,3,4,5,6,7,8,9],4).map(a=>a.join(“”));
log(arrayCreate([1,2,3,4,5,6,7,8,9,5]).map(a=>a.join(“”));
log(arrayCreate([1,2,3,4,5,6,7,8,9],6).map(a=>a.join(“”))

.as控制台包装{最大高度:100%!重要;顶部:0;}
任何大小和选项的解决方案

cons