Given a target value and a list of numbers to pick from, pick numbers from the list such that the
numbers picked add up to the target value.
package careercup;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class test1 {
private int target;
public test1(int target) {
this.target = target;
}
public static void main(String[] args){
Integer[] a = new Integer[]{-23, 7, 1, 2, 3, 4, 28, 1324};
Arrays.sort(a);
List<Integer> input = Arrays.asList(a);
List<List<Integer>> rel = new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
new test1(0).subsets(input, rel,temp,0, 0);
if(rel.isEmpty()) System.out.println("no results.");
else System.out.println(rel);
}
private void subsets(List<Integer> input, List<List<Integer>> rel, List<Integer> temp, int level, int partSum){
if(level>input.size()) return;
if(partSum == target && !temp.isEmpty()) {
rel.add(new LinkedList<Integer>(temp));
return;
}
if(partSum > target){
return;
}
for(int i=level; i<input.size();i++){
temp.add(input.get(i));
partSum+=input.get(i);
subsets(input, rel, temp, i+1, partSum);
partSum-=input.get(i);
temp.remove(temp.size()-1);
}
}
}