📖 Scenario: Imagine you have a small collection of unique fruits and you want to find all possible combinations of these fruits to make different fruit baskets.
🎯 Goal: You will build a program that generates all possible subsets (combinations) of a given list of fruits using the bitmask technique.
📋 What You'll Learn
Create an array called fruits with the exact values 'apple', 'banana', and 'cherry'
Create a variable called n that stores the length of the fruits array
Use a for loop with variable bitmask to iterate from 0 to (1 << n) - 1
Inside the loop, use another for loop with variable j from 0 to n - 1 to check if the j-th bit in bitmask is set
Create a subset array for each bitmask and add the corresponding fruits
Print all subsets as arrays
💡 Why This Matters
🌍 Real World
Generating all combinations of items is useful in shopping apps, meal planning, and testing different feature sets.
💼 Career
Understanding subsets and bitmasking helps in coding interviews and solving problems related to combinations and optimization.
Progress0 / 4 steps
1
Create the fruits array
Create an array called fruits with the exact values 'apple', 'banana', and 'cherry'
DSA Javascript
Hint
Use square brackets [] to create an array and separate items with commas.
2
Create the length variable
Create a variable called n that stores the length of the fruits array using fruits.length
DSA Javascript
Hint
Use array.length to get the number of items in an array.
3
Generate subsets using bitmask
Use a for loop with variable bitmask to iterate from 0 to (1 << n) - 1. Inside it, create an empty array called subset. Use another for loop with variable j from 0 to n - 1 to check if the j-th bit in bitmask is set using (bitmask & (1 << j)) !== 0. If set, push fruits[j] into subset. Store each subset in an array called allSubsets.
DSA Javascript
Hint
Use bitwise AND & and left shift << to check bits in bitmask.
4
Print all subsets
Use console.log(allSubsets) to print the array containing all subsets of fruits.
DSA Javascript
Hint
Use console.log to display the final array of subsets.
Practice
(1/5)
1. What does the bitmask technique help generate when applied to a set of elements?
easy
A. Only subsets with even number of elements
B. Only the largest subset
C. All possible subsets of the set
D. Only subsets with odd number of elements
Solution
Step 1: Understand bitmask representation
Each bit in a bitmask represents whether an element is included (1) or excluded (0) from a subset.
Step 2: Generate subsets using bitmask
By iterating through all bitmasks from 0 to 2^n - 1, we get all possible combinations of elements, i.e., all subsets.
Final Answer:
All possible subsets of the set -> Option C
Quick Check:
Bitmask = subsets [OK]
Hint: Bitmask bits map directly to subset inclusion [OK]
Common Mistakes:
Thinking bitmask generates only largest subsets
Confusing subsets with permutations
Assuming bitmask filters subsets by size
2. Which of the following is the correct way to start a loop for generating subsets using bitmask for an array of length n in JavaScript?
easy
A. for (let mask = 0; mask < n; mask++)
B. for (let mask = 0; mask < (1 << n); mask++)
C. for (let mask = 0; mask <= n; mask++)
D. for (let mask = 1; mask <= n; mask++)
Solution
Step 1: Understand bitmask range
Bitmask must cover all numbers from 0 to 2^n - 1, which is (1 << n) in JavaScript.
Step 2: Correct loop syntax
The loop should start at 0 and run while mask is less than (1 << n), incrementing mask by 1 each time.
Final Answer:
for (let mask = 0; mask < (1 << n); mask++) -> Option B
Quick Check:
Loop from 0 to 2^n-1 [OK]
Hint: Use (1 << n) for 2^n subsets [OK]
Common Mistakes:
Starting loop at 1 instead of 0
Using mask <= n instead of mask < 2^n
Confusing n with 2^n in loop condition
3. What is the output of the following code snippet?
const arr = ["a", "b"];
const subsets = [];
for (let mask = 0; mask < (1 << arr.length); mask++) {
let subset = [];
for (let i = 0; i < arr.length; i++) {
if ((mask & (1 << i)) !== 0) {
subset.push(arr[i]);
}
}
subsets.push(subset);
}
console.log(subsets);
medium
A. [[], ["a"], ["b"], ["a", "b"]]
B. [["a"], ["b"], ["a", "b"]]
C. [[], ["b"], ["a"], ["a", "b"]]
D. [["a", "b"]]
Solution
Step 1: Understand bitmask iterations
For arr length 2, mask runs from 0 to 3 (0b00 to 0b11), generating 4 subsets.
Hint: Check bit positions for element inclusion [OK]
Common Mistakes:
Missing empty subset []
Swapping order of subsets
Ignoring bitmask 0 producing empty subset
4. Identify the error in the following code snippet for generating subsets using bitmask:
const arr = [1, 2, 3];
const subsets = [];
for (let mask = 0; mask <= (1 << arr.length); mask++) {
let subset = [];
for (let i = 0; i < arr.length; i++) {
if (mask & (1 << i)) {
subset.push(arr[i]);
}
}
subsets.push(subset);
}
console.log(subsets);
medium
A. The subsets array should be cleared inside the outer loop.
B. The inner loop should run until i <= arr.length.
C. The bitwise AND condition should be (mask | (1 << i)) instead of &.
D. The outer loop condition should be mask < (1 << arr.length), not <=.
Solution
Step 1: Check outer loop range
The outer loop runs from 0 to (1 << arr.length) inclusive, which is one too many iterations (should be less than).
Step 2: Correct loop condition
It should be mask < (1 << arr.length) to avoid an extra invalid subset iteration.
Final Answer:
The outer loop condition should be mask < (1 << arr.length), not <=. -> Option D
Quick Check:
Loop runs 2^n times, not 2^n+1 [OK]
Hint: Use <, not <=, for bitmask loop end [OK]
Common Mistakes:
Using <= instead of < in loop condition
Confusing bitwise AND (&) with OR (|)
Extending inner loop beyond array length
5. Given an array arr = [1, 2, 3, 4], how many subsets will be generated by the bitmask method, and what is the subset generated when mask = 9? (mask is in decimal)
hard
A. 16 subsets; subset for mask 9 is [1, 4]
B. 8 subsets; subset for mask 9 is [2, 3]
C. 16 subsets; subset for mask 9 is [2, 4]
D. 15 subsets; subset for mask 9 is [1, 3, 4]
Solution
Step 1: Calculate total subsets for array length 4
Total subsets = 2^4 = 16.
Step 2: Decode mask 9 in binary and map to elements
9 in binary is 1001. Bits set at positions 0 and 3 correspond to arr[0] = 1 and arr[3] = 4.
Final Answer:
16 subsets; subset for mask 9 is [1, 4] -> Option A
Quick Check:
2^4 = 16 subsets; mask 9 = 1001 binary [OK]
Hint: Convert mask to binary, map bits to elements [OK]
Common Mistakes:
Miscounting total subsets as 15
Misinterpreting binary mask bits
Confusing element indices with bit positions
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.