一个高效的算法能够创建所有可能的组合是什么?

6
假设有n个条目,每个条目的值可以是0或1。这意味着可能有2的n次方种组合方式。条目数量可以从1到6不等。
如何将每个可能的组合创建为数字序列(例如,对于n = 2:00,01,10,11),而不必使用成千上万个条件判断语句?

2
你看过这个问题的答案吗:https://dev59.com/9nVC5IYBdhLWcg3w-mVO - Shog9
5个回答

17
你可以通过以二进制形式打印数字0..2^n-1来实现这一点。

谢谢,没有想到。有时候答案就在你的眼前,但你却看不到它。 - Hans

3
最好直接使用整数:
n = 5
for x in range(2**n):
  print ''.join(str((x>>i)&1) for i in xrange(n-1,-1,-1))

这个答案中学到的疯狂的十进制转二进制转换。

输出:

00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111

很遗憾,我一点也不懂Python,我主要使用Java。但是我会尝试着去理解它。谢谢。 - Hans

1

生成一个数学组合的第m个字典序元素。链接

你必须查看DON KNUTH的内容。(生成所有可能的组合。注意:C#代码也提供在那里。)


0

或者使用 itertools

import itertools

for item in itertools.product((1, 0), repeat=4):
    print item

请注意,在这种情况下,该项是由4个元素组成的元组。

0
如果每个条目的可能值只能是0或1,并且您只想要0和1的组合,为什么不使用自然数(以二进制形式)直到2^(n-1) ...如上所建议的Nick..并在需要字符串时使用'0'填充格式...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接