Code:
import java.util.ArrayList;
import java.util.List;
public class CombinationApp {
private static int[] numbers= {1,2,3,4,5,6,7,8,9,10};
private static int[] sumsum= new int[numbers.length];
private static int sum= 10;
private static void solution(List<Integer> solution) {
System.out.println(solution);
}
private static void solve(int[] numbers, int i, int sum, List<Integer> solution) {
if (sum == 0)
solution(solution);
else
for (; i < numbers.length && sumsum[i] >= sum; i++) {
if (numbers[i] <= sum) {
solution.add(0, numbers[i]);
solve(numbers, i+1, sum-numbers[i], solution);
solution.remove(0);
}
}
}
public static void main(String[] args) {
for (int s= 0, i= numbers.length; --i >= 0; ) {
sumsum[i]= numbers[i]+s;
s+= numbers[i];
}
solve(numbers, 0, sum, new ArrayList<Integer>());
}
}
[4, 3, 2, 1]
[7, 2, 1]
[6, 3, 1]
[5, 4, 1]
[9, 1]
[5, 3, 2]
[8, 2]
[7, 3]
[6, 4]
[10]
Comment