【发布时间】:2015-03-12 22:21:10
【问题描述】:
假设我有 3 个整数数组:{1,2,3}, {2,3}, {1}
我必须从每个数组中只取一个元素,以形成一个所有数字都是唯一的新数组。在本例中,正确答案是:{2,3,1} and {3,2,1}。 (因为我必须从第三个数组中取出一个元素,并且我希望所有数字都是唯一的,所以我绝不能从第一个数组中取出数字 1。)
我做了什么:
for a in array1:
for b in array2:
for c in array3:
if a != b and a != c and b != c:
AddAnswer(a,b,c)
这是蛮力,虽然有效,但不能很好地扩展。如果现在我们要处理 20 个数组而不是 3 个呢?我认为编写 20 个嵌套的 for 循环并不好。有没有聪明的方法来做到这一点?
【问题讨论】:
-
您需要所有可能的集合还是只需要一个?
-
所有可能的集合,谢谢。
-
当您指定一种语言时,这样就容易多了。 :)
-
一种选择是执行递归函数,当您排除值列表时,该函数会列出集合列表中的所有解决方案:如果有一个集合,则只需返回剩余值的列表(在一个单例集),否则你循环第一个集的剩余值,然后递归地将当前值添加到排除列表。