Back to all solutions

#2044 - Count Number of Maximum Bitwise-OR Subsets

Problem Description

Given an integer array nums, find the maximum possible bitwise OR of a subset of nums and return the number of different non-empty subsets with the maximum bitwise OR.

An array a is a subset of an array b if a can be obtained from b by deleting some (possibly zero) elements of b. Two subsets are considered different if the indices of the elements chosen are different.

The bitwise OR of an array a is equal to a[0] OR a[1] OR ... OR a[a.length - 1] (0-indexed).

Solution

/**
 * @param {number[]} nums
 * @return {number}
 */
var countMaxOrSubsets = function(nums) {
  const maxOr = nums.reduce((or, num) => or | num, 0);
  let count = 0;

  backtrack(0, 0);

  return count;

  function backtrack(index, currentOr) {
    if (currentOr === maxOr) count++;
    for (let i = index; i < nums.length; i++) {
      backtrack(i + 1, currentOr | nums[i]);
    }
  }
};