Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Javascript 如何得到一个包含另一个数组中n个元素的所有可能排列的数组?_Javascript_Arrays_Permutation - Fatal编程技术网

Javascript 如何得到一个包含另一个数组中n个元素的所有可能排列的数组?

Javascript 如何得到一个包含另一个数组中n个元素的所有可能排列的数组?,javascript,arrays,permutation,Javascript,Arrays,Permutation,不久前我开始学习[这实际上是我的第一篇文章],但我决定尝试用javascript编写一个小的辅助项目,我遇到了这个挑战 我现在有一个包含7个元素的数组,但我计划将来更改它的长度。我需要另一个数组,包含第一个数组中N个元素的所有可能组合 到目前为止,我只能找到一种获得所有组合(N=firstArray.length-1)的方法,但对于较低的N没有任何运气 有人能解释一下吗?谢谢 这里有一种方法可以得到答案。要理解这个想法,首先想象你想要找到由两个非相似元素组成的数组的所有排列[A,B]。不要将此数

不久前我开始学习[这实际上是我的第一篇文章],但我决定尝试用javascript编写一个小的辅助项目,我遇到了这个挑战

我现在有一个包含7个元素的数组,但我计划将来更改它的长度。我需要另一个数组,包含第一个数组中N个元素的所有可能组合

到目前为止,我只能找到一种获得所有组合(N=firstArray.length-1)的方法,但对于较低的N没有任何运气


有人能解释一下吗?谢谢

这里有一种方法可以得到答案。要理解这个想法,首先想象你想要找到由两个非相似元素组成的数组的所有排列[A,B]。不要将此数组视为[A,B]。把它想象成[0,1]。由于这两个元素的所有组合都可以通过在基数2中从0到3的计数找到,因此我们有[0,0]、[0,1]、[1,0]和[1,1]。因此,从1到3在基数2中计算将得到所有可能的组合,如果你扔掉所有带有重复数字的数组,然后用A代表0,B代表1,你就得到了答案

所以要解决你的七要素问题

  • 声明一个变量,比如“let allCombinations=[];来存储所有可能的组合

  • 以七为基数计算,并使计算机从[0,0,0,0,0,0]计数到以七为基数计算的[6,6,6,6,6,6]

  • 使用从0到6的循环检查每个新的七进制数组中是否有重复的数字,以检查数组中的每个元素是否出现多次

  • 如果元素在当前数组中出现多次,则将其丢弃。否则,将其推到AllCombination

  • 继续此过程,直到到达[6,6,6,6,6,6],然后映射数组,并用相应的原始元素替换每个数字


  • 这个过程也可以修改为考虑具有重复元素的集合。但这种方法解决的基本问题是确保考虑元素的每一种可能排列而不遗漏任何排列。

    标题是排列,正文是组合……选择一个:p您能给出一个结果示例吗(不要为7个元素这么做,而是为更易于管理的元素,比如3或4个元素)如果你能做
    N=firstArray.length-1
    …为什么你不能做
    N=firstArray.length-2
    ?你能在
    N=firstArray.length-1
    时显示你的代码吗?也许这是对你已经编写的代码的简单修改,是一种通过交换产生排列的方法。嗨!谢谢你的答案。我正在尝试用你的建议。我想它会合二为一的。再次感谢=]@Nandofire如果你对这项技术有问题,请随时提问,我可以给你另一种方法。此外,如果你最终使用了这种方法,你介意接受这个答案吗?谢谢。再次感谢。我认为它有效!出于某种原因,我认为使用二进制将是我们的选择很好,但是制作计数器更简单,也更符合我的代码。再次感谢!