Learn-dsa..in 30 days!



























CC-10 : Find number combinations with required sum.

Description:

Given an input array of numbers N, and input integer requiredSum, find all combinations of numbers from input array that sum up to requiredSum. Note: numbers in array can be duplicated to sum up to required number.

Test cases and expected outputs:

Input Parameters Expected outputs
arr= {1,2,4}; Number combinations with sum 4:
1,1,1,1
1,1,2
2,2
4

Pseudocode:

getCombinationsWithSum(n):

Initialize ArrayList of ArrayList of Integers named combinations.
Initialize ArrayList of integers named currCombi.
Initialize variable idx to 0.
Call getCombinationsWithSumRecursive( arr,reqSum,idx,combinations,currCombi).

getCombinationsWithSumRecursive( arr,reqSum,idx,combinations,currCombi):

If reqSum is 0:
Add currCombi to combinations.
return.
If reqSum < 0 or idx > arr.length :
Return.
CurrCombi.add(arr[idx].
Recursively call getCombinationsWithSumRecursive(arr,reqSum-arr[idx],idx,combinations,currCombi).
Remove last number from currCombi.
Recursively call getCombinationsWithSumRecursive(arr,reqSum-arr[idx],idx+1,combinations,currCombi).

Code:

public ArrayList<ArrayList<Integer>> getCombinationsWithSum(int[] arr,int reqSum){
	ArrayList<ArrayList<Integer>> combinations=new ArrayList<ArrayList<Integer>>();
	ArrayList<Integer> currCombi=new ArrayList<Integer>();
	int idx=0;
	 getCombinationsWithSumRecursive(arr, reqSum, idx, combinations,currCombi);
	 return combinations;
}

public void getCombinationsWithSumRecursive(int[] arr, int reqSum, int idx, 
		ArrayList<ArrayList<Integer>> combinations,ArrayList<Integer> currCombi) {
	if (reqSum==0) {
		combinations.add(new ArrayList<Integer>(currCombi));
		return;
	} else {
		if (reqSum < 0  || idx >=arr.length) {
			return;		
		} else {
		currCombi.add(arr[idx]);
		getCombinationsWithSumRecursive(arr, reqSum-arr[idx], idx, combinations,currCombi);
		currCombi.remove(currCombi.size()-1);
		getCombinationsWithSumRecursive(arr, reqSum, idx+1, combinations,currCombi);
	}
	}
}

Click here to download and run code and test cases !