【发布时间】:2014-03-29 22:10:15
【问题描述】:
我正在努力解决这个问题: 给定 0 和 1 的数量,生成包含 0 和 1 的所有可能组合的列表。
例子:如果我们有一个1和两个0,算法会返回
001
010
100
问题在于经典的组合算法没有为此目的进行优化。 这是非优化组合算法将返回的结果:
001
001
010
010
100
100
如您所见,所有组合都重复了两次,因为 0 被解释为不同的元素。
如何在不重复组合的情况下,生成输入 0 和 1 的数量的可能组合列表?
PS : 这将在 Javascript 中使用
编辑:已解决!使用@Batch 方法。
function combin(o, i)
{
if (o == 0 && i > 0)
{
for (var j = 0, s = ''; j < i; j++)
{
s += '1';
}
return [s];
}
else if (i == 0 && o > 0)
{
for (var j = 0, s = ''; j < o; j++)
{
s += '0';
}
return [s];
}
else if (i == 0 && 0 == o)
{
return [''];
}
else if (i > 0 && o > 0)
{
var l = combin(o - 1, i);
for (var j in l)
{
l[j] = '0' + l[j];
}
var k = combin(o, i-1);
for (var j in k)
{
k[j] = '1' + k[j];
}
return l.concat(k);
}
}
【问题讨论】:
-
这些并不是所有可能的组合。
-
@Oriol 否,因为它两次给出相同的组合。看:jsfiddle.net/FkT2n
-
@Oriol 否,因为我想生成严格数量为 0 和 1 的组合。我不想要包含 0 和 1 的所有组合。我需要所有恰好具有 x 0 的组合例如,恰好 y 1。
-
为了帮助人们帮助你,编辑帖子并复制/粘贴源代码。
标签: javascript algorithm combinatorics