javascript-计算系列的所有组合
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-计算系列的所有组合,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1937字,纯文字阅读大概需要3分钟。
内容图文
![javascript-计算系列的所有组合](/upload/InfoBanner/zyjiaocheng/687/732c1c350ba046759176f00bdb850aca.jpg)
我有一个项目列表,每个项目都有一个数量.
var items = {
1: 12, // we have 12 x item1
2: 1, // we have 1 x item2
3: 1,
4: 7,
5: 2,
6: 2
};
或者,可以将其视为:
var items = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6];
您将如何获取这些项目的每个组合的列表,请记住顺序完全不重要(因此[1,2,3] == [3,2,1]),而不是每个项目结果中必须存在.
我想输出看起来像这样:
[1]
[1, 1]
[1, 2]
[1, 3]
...
或者,甚至更好:
{1 : 1} // 1 x item1
{1 : 2} // 2 x item1
{1 : 1, 2 : 1} // 1 x item1, 1 x item2
{1 : 1, 3 : 1}
....
解决方法:
更新:发布此答案后,我注意到existing answer具有相同的方法,但由于它比较冗长,甚至具有有效的代码,我仍会继续留神:)
如果原始项目池中每个项目只有一个实例,并且您的项目代表二进制数字;
var items {
1 : 1,
2 : 1,
4 : 1,
8 : 1,
16: 1,
32: 1
};
该问题将简化为生成可以由这些数字表示的所有数字的序列:
> 0([]-无项目)
> 1([1])
> 2([2])
> 3([2,1])
> 4([4])
>等
因此,您的问题可以被视为简单地询问可以由-不是二进制-而是mixed-radix数字系统表示的数字序列.
这意味着,您可以为此怪异的编号系统编写一个计数器,以循环访问值0和MAX.因此,从累加最低有效数字开始,然后在用尽所有可能的数值后,继续使用最高有效数字.
var items = {
1: 12, // we have 12 x item1
2: 1, // we have 1 x item2
3: 1,
4: 7,
5: 2,
6: 2
};
var counter = {
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0
};
function increment(digit) {
if (digit > 6) {
return false;
}
var value = counter[digit] + 1;
if (value > items[digit]) {
counter[digit] = 0;
return increment(digit + 1);
}
counter[digit] = value;
return true;
}
while (increment(1)) {
var set = [];
for (var digit in counter) {
var value = counter[digit];
for (var i = 0; i < value; i++) {
set.push(digit);
}
}
document.write("<div>" + set + "</div>");
}
输出看起来像这样:
1 1,1 1,1,1 ---- snip ---- 2 1,2 1,1,2 ---- big snip ---- 1,1,1,1,1,1,1,1,2,3,4,4,4,4,4,4,4,5,5,6,6 1,1,1,1,1,1,1,1,1,2,3,4,4,4,4,4,4,4,5,5,6,6 1,1,1,1,1,1,1,1,1,1,2,3,4,4,4,4,4,4,4,5,5,6,6 1,1,1,1,1,1,1,1,1,1,1,2,3,4,4,4,4,4,4,4,5,5,6,6 1,1,1,1,1,1,1,1,1,1,1,1,2,3,4,4,4,4,4,4,4,5,5,6,6
内容总结
以上是互联网集市为您收集整理的javascript-计算系列的所有组合全部内容,希望文章能够帮你解决javascript-计算系列的所有组合所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。