denim1: sum of subsets
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); } } }