Combination Sum IV

Moderate
0/80
profile
Contributed by
49 upvotes
Asked in companies
OYOFastenal

Problem statement

You are given an array of distinct integers and you have to tell how many different ways of selecting the elements from the array are there such that the sum of chosen elements is equal to the target number tar.

Note: Two ways are considered the same if for every index the contents of both the ways are equal example way1=[1,2,3,1] and way2= [1,2,3,1] both way1 and way 2 are the same.

But if way1 =[1,2,3,4] and way2= [4,3,2,1] then both ways are different.

Input is given such that the answer will fit in a 32-bit integer. For Example:
If N = 3 and tar = 5 and array elements are [1,2,5] then the number of possible ways of making sum = 5 are:
(1,1,1,1,1)
(1,1,1,2)
(1,2,1,1)
(2,1,1,1)
(1,1,2,1)
(2,2,1)
(1,2,2)
(2,1,2)
(5)
Hence the output will be 9.
Detailed explanation ( Input/output format, Notes, Images )
Input Format :
The first line of the input contains an integer, 'T’, denoting the number of test cases.

The first line of each test case will contain two space-separated integers ‘N’ and “tar”, denoting the size of the array and the given integer.

The second line of each test case contains ‘N’ space-separated integers denoting elements of the array.
Output Format :
For each test case, print the number of ways that satisfy the condition mentioned in the problem statement.

Print a separate line for each test case.
Note :
You do not need to print anything, it has already been taken care of. Just implement the given function.
Constraints:
1 <= N <= 200
1 <= nums[i] <= 1000
All the elements will be unique
1 <= tar <= 1000

Time limit: 1 sec
Sample Input 1 :
2
3 5
1 2 5
2 3
1 2
Sample output 1 :
9
3
Explanation For Sample Output 1:
For the first test case, the number of possible ways will be
(1,1,1,1,1)
(1,1,1,2)
(1,2,1,1)
(2,1,1,1)
(1,1,2,1)
(2,2,1)
(1,2,2)
(2,1,2)
(5)

For the second test case, the number of ways will be
(1,1,1)
(1,2)
(2,1)
Here you can see we have considered (1,2) and (2,1) in 2 different ways.
Sample Input 2 :
2
3 4
12 1 3
2 41
2 34
Sample output 2 :
3
0
Hint

Check for every possible way such that the sum is ‘tar’.

Approaches (3)
Brute Force (Recursion)

The basic idea is to go over recursively to find the way such that the sum of chosen elements is “tar”. For every element, we have two choices

1. Include the element in our set of chosen elements.

2. Don’t include the element in our set of chosen elements.

 

When we include an element in the set then we decrease the x by the value of the element at the end. At any point, if we have x=0 then we can say that we have found the set of integers such that the sum of the set is equal to x.
 

Let us define a function “numberOfWays( sum, n, num)”, where “sum” is the remaining sum that we have to make, ‘n’ is the size of the array, num is the array which is given to us. Each time we have ‘n’ elements from which we have to take one.
 

Here is the algorithm:

 

  • numberOfWays function:
    • If sum is less than 0
      • return 0
    • If sum is 0
      • Return 1
    • Declare an integer variable “ans” and initialize it with 0.
    • Iterate over n(say ‘j’)
      • Update ans as ans + numberOfWays(sum-num[j], n, num)
    • Return ans
       
  • given function:
    • Declare an integer variable n and initialize it as the size of the array.
    • Return numberOfWays( tar, n, num).
       
Time Complexity

O( tar^N ), where tar is the target sum and ‘n’ is the size of the array.
 

Each time we have ‘n’ options from which we have to select one and in the worst-case “tar” is decreased by 1 each time. So, if you try to make the recursive tree you can see each time there will be ‘n’ recursive call generated.

So time complexity will be O( tar^N ).

Space Complexity

O(tar), where ‘tar’ is the sum which we want.

 

The recursive stack for the numberOfWays function can contain at most “tar”. Therefore, the overall space complexity will be O(tar).

Code Solution
(100% EXP penalty)
Combination Sum IV
Full screen
Console