javascript - 如何从 JavaScript 数组值中找到所有长度的所有排列?

标签 javascript jquery algorithm

例如,如果我有一个包含 items 的数组

["A", "B", "C"]

我想创建一个函数,返回一个数组,其中包含所有可能的排列/所有可能的混合结果,所有大小从 1 到数组中的项目数

例如结果应该在这里:

["","A" "B", "C","AB", "BA", "AC", "CA", "CB","BC", "ABC", "ACB", "BAC", "BCA", "CAB", "CBA"]

你能帮帮我吗?

最佳答案

我不太擅长js,但我会尝试向您展示如何解决这个问题,并会为您提供一些非常有用的c++代码类似于 js

首先,你必须知道数组中的元素个数

这里是js代码。

var arr=["a","b","c"];     
var l=arr.length;

这里是主要思想:

所有可能的排列数,不包括重复的元素是2^l,l是元素的个数。

对于上面的arr,所有可能排列的个数是2^3=8,也等于二进制的(111)+1+1是空集。

如果您从 0 数到 7,您将有 8 个元素。如果用二进制从 (000) 数到 (111) 也是一样的。

计数结果为:

000
001
010
011
100
101
110
111

如果你寻找零和一(你可能会说真或假),它们将显示所有可能的排列的数量而不重复。(000:选择没有元素,001:选择最后一个元素,。 .., 101 选择第一个和最后一个元素,...,111: 选择所有元素)。 所以现在你可以创建一个函数来生成集合 {"","a","b","c","ab","ac","bc","abc"}.

现在您需要找到具有多个元素的元素的可能组合。我不知道在 js 中是什么,但在 c++ 中我通常使用 next_permutation .

求二进制数时,位数必须与数组元素个数相同。

//the code of converting the decimal number to binary.
strint tobinary(int l,int n){
    int x;
    string str="";
    //the while statement finds the binary equivalent
    while(n!=0){
    x=n/2;
    n=n%2;
    str=(x+'0')+str; //the '0' is equal to 48(the ASCII code of 0)
    }
    //the while statement adds zeros to the left of the binary number until it's length is equal to the number of the elements.
    while(str.length()!=l)
        str="0"+str;
    return str;
}

您现在必须定义一个向量或一个动态数组,并为 2^l 次找到与字符串 str 中的元素相反的元素。

如果你想在 javascript 中找到类似排列的东西,see here .

希望我的回答对您有所帮助;

关于javascript - 如何从 JavaScript 数组值中找到所有长度的所有排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29196936/

相关文章:

javascript - 有没有办法将 API 数据转换为 Mapbox 图层?

javascript - 使用 JavaScript 格式化值

javascript - 'Then' 在 CasperJS 中的真正含义是什么

javascript - 如何循环数据并在执行一定次数后等待

javascript - d3.js : Responding to Mousewheel zooms Appropriately

jQuery addClass 问题

javascript - 将事件附加到动态创建的表单

algorithm - 获取第 k 个最大值的许多查询的数据结构

javascript - 生成字符串的所有辅音

javascript - 对象在一个参数内传递多个参数