Count Number of Maximum Bitwise-OR Subsets

MediumArrayBacktrackingBit ManipulationEnumeration

Solution

export function countMaxOrSubsets(nums: number[]): number {
  const maxOr = nums.reduce((prev, num) => prev | num, 0);
 
  function dfs(i: number, or: number): number {
    if (i === nums.length) {
      return or === maxOr ? 1 : 0;
    }
    return dfs(i + 1, or) + dfs(i + 1, or | nums[i]);
  }
 
  return dfs(0, 0);
}