forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGenerateSubSets.js
More file actions
Latest commit
34 lines (32 loc) · 1001 Bytes
/
Copy pathGenerateSubSets.js
File metadata and controls
34 lines (32 loc) · 1001 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* @function generateSubSets
* @param {Array} inputArray
* @returns {Array}
* @example [1,2] -> [[],[1],[2],[1,2]]
*/
// The time complexity of this algorithm is BigO(2^n) where n is the length of array
functiongenerateSubSets(inputArray){
if(!Array.isArray(inputArray)){
thrownewError('Provided input is not an array')
}
if(inputArray.length>32){
thrownewRangeError('Error size should be less than equal to 32')
}
letarrayLength=inputArray.length
letsubSets=[]
// loop till (2^n) - 1
for(leti=0;i<1<<arrayLength;i++){
letsubSet=[]
for(letj=0;j<arrayLength;j++){
// 1 << j it shifts binary digit 1 by j positions and then we perform
// and by AND operation we are checking whetheer jth bit
// in i is set to 1 if result is non zero just add into set
if(i&(1<<j)){
subSet.push(inputArray[j])
}
}
subSets.push(subSet)
}
returnsubSets
}
export{generateSubSets}