Javascript 找到每一个可能的答案;“非重复”;给定一组6位数字的组合

Javascript 找到每一个可能的答案;“非重复”;给定一组6位数字的组合,javascript,arrays,algorithm,math,for-loop,Javascript,Arrays,Algorithm,Math,For Loop,因此,我首先被要求创建一个函数,在给定一组6个数字(范围为0-9)的情况下查找可能的组合。请记住,用户会收到输入提示,以便输入可以更改或不同。。换句话说,输入是123456或099384结束编辑。此函数必须返回3位结果的所有可能组合,同时使用可重复次数的输入6位。。所以它会返回111 112 113等 。我是一名php/javascript用户,选择了javascript,这样它就可以在浏览器中的脱机文件上运行 这是我在下面构建的,效果很好 function findthree(nums) {

因此,我首先被要求创建一个函数,在给定一组6个数字(范围为0-9)的情况下查找可能的组合。请记住,用户会收到输入提示,以便输入可以更改或不同。。换句话说,输入是123456或099384结束编辑。此函数必须返回3位结果的所有可能组合,同时使用可重复次数的输入6位。。所以它会返回111 112 113等

。我是一名php/javascript用户,选择了javascript,这样它就可以在浏览器中的脱机文件上运行

这是我在下面构建的,效果很好

function findthree(nums) {
    for (var i = 0; i < 10; i++) {
        if (in_array(i, nums)) {
            for (var ii = 0; ii < 10; ii++) {
                if (in_array(ii, nums)) {
                    for (var iii = 0; iii < 10; iii++) {
                        if (in_array(iii, nums)) {
                            $('body').append('<div>' + i + '' + ii + '' + iii + '</div>');
                        }
                    }
                }
            }
        }
    }

}


function in_array(needle, haystack) {
    var length = haystack.length;
    for (var i = 0; i < length; i++) {
        if (haystack[i] == needle) return true;
    }
    return false;
}
函数findthree(nums){
对于(变量i=0;i<10;i++){
if(在_数组中(i,nums)){
对于(var ii=0;ii<10;ii++){
if(in_数组(ii,nums)){
对于(var iii=0;iii<10;iii++){
if(在_数组中(iii,nums)){
$('body')。追加(''+i+''+ii+''+iii+'');
}
}
}
}
}
}
}
_数组中的函数(针、草垛){
var length=haystack.length;
对于(变量i=0;i
我的问题是。。我如何创建一个类似的函数来显示除“组合副本”之外的所有组合。换句话说,函数不会返回211,因为112已经返回,654不会返回,因为456已经返回。我本打算尝试使用一个数组_差分函数,但无法完全理解它是如何工作的

提前感谢您的帮助

在我选择的答案的帮助下编辑找到的答案

function findthreenodupe(nums) {
    nums = $.distinct(nums);
    nums.sort(function(a, b) {
        return a - b
    });
    alert(nums);
    for (var i = 1; i < 10; i++) {
        if (in_array(i, nums)) {
            for (var ii = i; ii < 10; ii++) {
                if (in_array(ii, nums)) {
                    for (var iii = ii; iii < 10; iii++) {
                        if (in_array(iii, nums)) {
                            $('body').append('<div>' + i + '' + ii + '' + iii + '</div>');
                        }
                    } // end of iii for loop
                } // end of ii for loop
            } // end of i for loop
        }
    }
}
函数findthreenodupe(nums){
nums=$.distinct(nums);
nums.sort(函数(a,b){
返回a-b
});
警报(nums);
对于(变量i=1;i<10;i++){
if(在_数组中(i,nums)){
对于(变量ii=i;ii<10;ii++){
if(in_数组(ii,nums)){
对于(var iii=ii;iii<10;iii++){
if(在_数组中(iii,nums)){
$('body')。追加(''+i+''+ii+''+iii+'');
}
}//循环iii结束
}//循环的ii结束
}//循环的i结束
}
}
}

以下代码将显示4,5,6的组合。您可以更改以包含任何值

for (var i = 4; i < 7; i++)
    for(var y = i; y < 7 ; y++)
        for(var z = y ; z < 7; z++)
            $('#result').append('<div>' + i + '' + y + '' + z + '</div>');
for(变量i=4;i<7;i++)
对于(变量y=i;y<7;y++)
对于(var z=y;z<7;z++)
$('#result')。追加(''+i+''+y+''+z+'');

这就是你想要的吗

您要做的第一件事是对输入进行排序并删除重复的数字。例如,从
099384
可以得到
03489

然后,您甚至不必检查
0-9
中的所有数字,就可以直接使用数组索引。这将消除一些工作,并且您可以去掉丑陋的
if(在_数组(i,nums)中)
括号。像这样的方法应该会奏效:

for(var i=0; i<nums.length; i++){
    for(var ii=i; ii< nums.length; ii++){
        for(var iii=ii; iii<nums.length; iii++){
            $('body').append('<div>' + nums[i] + '' + nums[ii] + '' + nums[iii] + '</div>');
        }
    }
}
额外好处:通过这种方式找到的组合数始终是
nums
中不同数字的数量

function findthree(nums) {
for (var i=0; in_array(i, nums); i++)
  if(in_array(i, nums))  
    for (var j=i; in_array(j, nums); j++) 
       if(in_array(j, nums) 
          for (var k=j; in_array(k, nums); k++)
             if(in_array(k, nums) {
               // other stuff
             }
如果您不希望结果包含多次具有相同数字的三元组(112、133等),则更改初始值以不添加+1

function findthree(nums) {
for (var i=0; in_array(i, nums); i++)
  if(in_array(i, nums))  
    for (var j=i+1; in_array(j, nums); j++) 
       if(in_array(j, nums) 
          for (var k=j+1; in_array(k, nums); k++)
             if(in_array(k, nums) {
               // other stuff
             }

如果这是您的要求,只需返回所有数字都相同的组合。这不会像大多数其他响应一样输出任何涉及1、2或3的组合。这甚至不会使用提示中输入的nums数组。。输入可能是013328。。。不会总是123456等。使用索引从输入数组读取值!这甚至考虑输入(NUM)吗?如果输入为0,我可能不需要0-9之间的每个数字111123@jwpat7. 错别字,应该是小写字母i。我想你可以自己在输入数组中添加检查。。。但是我已经编辑添加了这样的内容,好的,我将在上面尝试这个示例,输入(数组nums)将始终被更改。为了解决这个问题,我对你的输入进行了预处理。对它们进行排序并删除重复项。对于您的示例输入
099384
,它将显示为
03489
。然后你可以用我用过的同样的
谢谢!!编辑问题以显示答案。。有前导零的数字呢?还是零?因为我从1开始,它不会工作。如果我在for循环中将其设为I=0,这会起作用吗?我更新了一个更简化的版本。如果输入是排序的/不同的,则根本不需要在数组()中使用
,只需在数组本身上迭代,使用索引而不是
0-9
function findthree(nums) {
for (var i=0; in_array(i, nums); i++)
  if(in_array(i, nums))  
    for (var j=i+1; in_array(j, nums); j++) 
       if(in_array(j, nums) 
          for (var k=j+1; in_array(k, nums); k++)
             if(in_array(k, nums) {
               // other stuff
             }