Я работаю над программой java, которая дает вам все возможные наборы чисел массива, которые вносят вклад в данную сумму.Java Algorithm для всех подмножеств массива (с целыми числами), удовлетворяющих сумме?
, например.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}
Solution пишет мной не служит цели, Может кто-нибудь, пожалуйста, помогите здесь и указать, что не так в алгоритме или там любой другой лучший способ решения.
Заранее спасибо.
код ниже:
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