Problem of the day
You are given an array ‘arr’ of ‘n’ positive integers.
You are also given a positive integer ‘target’.
Your task is to find all unique combinations of elements of array ‘arr’ whose sum is equal to ‘target’. Each number in ‘arr’ may only be used once in the combination.
Elements in each combination must be in non-decreasing order and you need to print all unique combinations in lexicographical order.
In lexicographical order, combination/array ‘a’ comes before array ‘b’ if at the first index 'i' where 'a[i]' differs from 'b[i]', 'a[i]' < 'b[i] or length of 'a' is less than 'b'.
Input: ‘arr’ = [1, 2, 3, 1], ‘target’ = 5.
Output: [[1,1,3], [2,3]]
Explanation:
All possible valid combinations with sum = 5 in lexicographical order are -:
(1, 1, 3)
(2, 3)
Then the first line of input contains two space-separated integers ‘n’ and ‘target’ denoting the number of elements in ‘arr’ and the ‘target'.
The second line of input contains 'n' space-separated integers the elements of array ‘arr’.
Print all possible valid combinations in a separate line in the lexicographical order. Elements in each combination must be in non-decreasing order.
You do not need to print anything, it has already been taken care of. Just implement the given function.
7 8
10 1 2 7 6 1 5
1 1 6
1 2 5
1 7
2 6
Here ‘n’ = 7, 'arr' = [10, 1, 2, 7, 6, 1 , 5], and ‘target’ = 8
All unique combinations whose sum of elements is 8 are -:
(1, 1, 6) because, 1 + 1 + 6 = 8
(1, 2, 5) because, 1 + 2 + 5 = 8
(1, 7) because, 1 + 7 = 8
(2, 6) because, 2 + 6 = 8
Note that, elements in each combination are in non-decreasing order and all unique combinations are arranged in lexicographical order.
5 5
1 2 3 1 5
1 1 3
2 3
5
Try to do this in O(2^n).
1 <= n <= 20
1 <= arr[i] <= 30
1 <= target <= 500
Time Limit: 1 sec