Microsoft, Infosys, Amazon , Accolite , ABCQ
Question;
Given an array of integers A and a sum B, find all unique combinations in A where the sum is equal to B.
ach number in A may only be used once in the combination.
Note:
All numbers will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
The combinations themselves must be sorted in ascending order.
If there is no combination possible the print "Empty" (without qoutes).
Example,
Given A = 10,1,2,7,6,1,5 and B(sum) 8,
All numbers will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
The combinations themselves must be sorted in ascending order.
If there is no combination possible the print "Empty" (without qoutes).
Example,
Given A = 10,1,2,7,6,1,5 and B(sum) 8,
A solution set is:
[1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
[1, 2, 5]
[2, 6]
[1, 1, 6]
Input:
First is T , no of test cases. 1<=T<=500
Every test case has three lines.
First line is N, size of array. 1<=N<=12
Second line contains N space seperated integers(x). 1<=x<=9.
Third line is the sum B. 1<=B<=30.
Output:
One line per test case, every subset enclosed in () and in every set intergers should be space seperated.(See example)
First is T , no of test cases. 1<=T<=500
Every test case has three lines.
First line is N, size of array. 1<=N<=12
Second line contains N space seperated integers(x). 1<=x<=9.
Third line is the sum B. 1<=B<=30.
Output:
One line per test case, every subset enclosed in () and in every set intergers should be space seperated.(See example)
Example:
Input:
2
7
10 1 2 7 6 1 5
8
5
8 1 8 6 8
12
Input:
2
7
10 1 2 7 6 1 5
8
5
8 1 8 6 8
12
Output:
(1 1 6)(1 2 5)(1 7)(2 6)
Empty
(1 1 6)(1 2 5)(1 7)(2 6)
Empty
Code:
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG {
public static void main (String[] args) {
//code
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
for (int i=0;i<m;i++){
int n = sc.nextInt();//sze of array
int [] ar= new int[n];
for (int j=0;j<n;j++){
ar[j] = sc.nextInt();
}
int tot = sc.nextInt();
// Arrays.sort(ar);
System.out.println(test(ar,tot));
}
}
public static void cs(List<List<Integer>> result, List<Integer> curr, int start, int target, int[] candidates){
if(target==0){
result.add(new ArrayList<Integer>(curr));
return;
}
if(target<0){
return;
}
int prev=-1;
for(int i=start; i<candidates.length; i++){
if(prev!=candidates[i]){ // each time start from different element
curr.add(candidates[i]);
cs(result, curr, i+1, target-candidates[i], candidates); // and use next element only
curr.remove(curr.size()-1);
prev=candidates[i];
}
}
}
public static List<List<Integer>> test (int [] arr , int tot){
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> curr = new ArrayList<Integer>();
Arrays.sort(arr);
cs(res,curr,0,tot,arr);//combibnation sum
return res;
}
}
Comments
Post a Comment