穷举一个数组的所有可能的组合(求js实现代码),谢谢!

sundapengmail 2018-08-04 08:09:41
有一个字符串string str="a,c,d,b"
我要列出所有的组合
一位的有:a,b,c,d
2位的有:ab,ac,ad,bc,bd,cd
3位的有:abc,abd,acd,bcd
四位的有:abcd
我这个字符串str里边的字符数量不是固定的,有可能是“a,b,c”也有可能是“a,b,c,d,e...一直到n”
求能适用于所有情况的算法(js实现代码,多谢!)

其实这个问题网上先前有c#的代码,但是c#不熟,请帮忙提供个js通用的版本。
...全文
878 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mchens 2018-11-10
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
代码优化一下

var str = "A,B,C,D,E";
var arr = str.split(",");
for (var a2 = []; a2.push([]) < arr.length;);
var l = Math.pow(2, arr.length)-1;
for (var i = 1; i <= l; i++) {
	var t = [];
	for (var s=i,k=0; s>0; s>>=1,k++)
		if (s&1==1)
			t.push(arr[k]);
	a2[t.length-1].push(t.join(""));
}
alert(a2.join("\n"));

我还想要得到 BA, CA, CB, BAC, CAB, CBA 等所有的排列 , 请问大神怎么写呀
sundapengmail 2018-10-07
  • 打赏
  • 举报
回复
好长时间没空上来,多谢!
天际的海浪 2018-08-05
  • 打赏
  • 举报
回复
代码优化一下

var str = "A,B,C,D,E";
var arr = str.split(",");
for (var a2 = []; a2.push([]) < arr.length;);
var l = Math.pow(2, arr.length)-1;
for (var i = 1; i <= l; i++) {
var t = [];
for (var s=i,k=0; s>0; s>>=1,k++)
if (s&1==1)
t.push(arr[k]);
a2[t.length-1].push(t.join(""));
}
alert(a2.join("\n"));

天际的海浪 2018-08-04
  • 打赏
  • 举报
回复

var str="a,b,c,d,e";
var arr = str.split(",");
for (var a2 = []; a2.push([]) < arr.length;);
var l = Math.pow(2, arr.length)-1;
for (var i = 1; i <= l; i++) {
var s2 = i.toString(2).split("").reverse();
var t = "", m = -1;
for (var k = 0; k < s2.length; k++) {
if (s2[k]=="1") {
t += arr[k];
m++;
}
}
a2[m].push(t);
}
alert(a2.join("\n"));

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧