在Java中生成分区

问题描述:

我给出了一个整数(让我们调用它),我需要生成一个数组数组,其中每个子数组是一个给定的整数集之一的元素列表,以及每个子阵列的所有元素都是x。数组数组需要包含这种形式的所有可能的不同子数组。例如,如果x是3并且可能元素的列表是{1,2},那么我期望生成{{1,2},{2,1}}。在Java中生成分区

什么是最好的方式去做(伪码或Java)?这个二维数组是否是存储这类数据的最佳方式?我想不出任何更好的,但我猜在那里有东西。

+0

您确定{1,2}和{2,1}要包含在答案中吗?我希望问题使用集合,并将它们视为重复。如果不同,我仍然会对set操作进行处理,然后查找所有有效集合的排列作为最后一步。 – erickson 2008-11-23 06:26:48

由于您不知道“子数组”的大小,我建议您使用Java的其中一个集合,如ArrayList<E>

对于存储,你可能想HashSets的一个LinkedList:

LinkedList<HashSet<Integer>> l; 

对于这个问题:这是子集的问题,这是NP完全的,所以我不认为有一个已知的,快方法来做到这一点。我没有采用任何优化理论,所以我可以做的最好的做法是只搜索输入的powerset,看它们的总和是否与输出匹配。