我正在研究Java程序,它給出了所有可能的數組的數量,這些數字有助於給定的總和。適用於數組的所有子集(具有整數)的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;
}
這不是這個網站的工作原理。 – shmosel
我們不是在這裏做你的工作,並按照你的命令。 – RamPrakash
我知道一個多項式運行時! – Dolev