Find all possible combinations of numbers to print given sum
The following program will print all possible combinations of additions from a given set of numbers so that they sumĀ up to a given target number
Sum Problem:
Input: X={n1,n2,n3,..n(s)}, G
Output= various combinations of X(n1..n(s)), where sum of X(n) = G
Solution:
This problem can be solved with a recursive combinations of all possible sums.
package com.sneppets.sum; import java.util.ArrayList; import java.util.Arrays; public class SumCombinations { static void sum_combinations_recursive(ArrayList<Integer> inputNumbers, int targetSum, ArrayList<Integer> partialNumbers) { int sum = 0; //calculate summation of partial numbers for (int x: partialNumbers) { sum += x; } //check if summation of partial numbers is equal to sum target if (sum == targetSum) System.out.println("sum("+Arrays.toString(partialNumbers.toArray())+")="+targetSum); //if we sum is greater than the target sum then why to continue if (sum >= targetSum){ //ends the current method invocation return; } //add the remaining numbers in the partial number list for(int i=0;i<inputNumbers.size();i++) { ArrayList<Integer> remainingNumbers = new ArrayList<Integer>(); int n = inputNumbers.get(i); for (int j=i+1; j<inputNumbers.size();j++) { remainingNumbers.add(inputNumbers.get(j)); } ArrayList<Integer> partialNumbersList = new ArrayList<Integer>(partialNumbers); partialNumbersList.add(n); //recursive call sum_combinations_recursive(remainingNumbers,targetSum,partialNumbersList); } } static void sum_combinations(ArrayList<Integer> inputNumbers, int targetSum) { sum_combinations_recursive(inputNumbers,targetSum,new ArrayList<Integer>()); } public static void main(String args[]) { Integer[] inputNumbers = {1,2,3,4,10,15,20,35,50,100}; int targetSum = 50; sum_combinations(new ArrayList<Integer>(Arrays.asList(inputNumbers)),targetSum); } }
Hey, Thank you. Itās very helpful