例如,如果我有一个包含 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/