【发布时间】:2017-02-10 18:05:12
【问题描述】:
我正在研究 java 程序,它为您提供了对给定总和有贡献的数组的所有可能集合数。
例如 we have an Array of numbers {1,2,2,3,4,5} these might be unsorted
总和“5”的可能子集/输出是:{1,2,2} {3,2} {4,1} & {5}
我写的解决方案没有达到目的,请有人在这里帮忙并指出算法中的错误或有其他更好的解决方案。
提前致谢。
代码如下:
public static List<List<Integer>> possibleCombinations(int[] array,
int requiredSum) {
Arrays.sort(array);
List<List<Integer>> result = new ArrayList<List<Integer>>();
HashSet<String> hello = new HashSet<String>();
for (int i = 0; i < array.length; i++) {
if (array[i] > requiredSum) {
break;
} else if (array[i] == requiredSum) {
List<Integer> single = new ArrayList<Integer>();
single.add(requiredSum);
result.add(single);
return result;
}
for (int j = i + 1; j < array.length; j++) {
if (array[j] > requiredSum) {
break;
} else if (array[j] == requiredSum) {
List<Integer> single = new ArrayList<Integer>();
single.add(requiredSum);
result.add(single);
return result;
}
List<Integer> possibility = new ArrayList<Integer>();
possibility.add(array[i]);
int sum = 0;
sum += array[i];
for (int k = j; k < array.length; k++) {
if ((sum + array[k]) < requiredSum) {
possibility.add(array[k]);
sum += array[k];
} else if (sum + array[k] == requiredSum) {
possibility.add(array[k]);
result.add(possibility);
break;
} else {
if(possibility.isEmpty() || possibility.size()==1){
break;
}
sum -= possibility.get(possibility.size() - 1);
possibility.remove(possibility.size() - 1);
k--;
continue;
}
}
}
}
return result;
}
【问题讨论】:
-
这不是本网站的运作方式。
-
我们不是来做你的工作并听从你的命令的。
-
我知道一个具有多项式运行时的!
-
@RamPrakash 我正在寻求帮助,而不是指挥任何人,请参阅我迄今为止尝试过的以下解决方案。
-
@ChrisGong 请找到我到目前为止一直在编写的代码,但并非在所有情况下都有效。
标签: java algorithm data-structures tree