850 problems solved - XOR & subsets

This is my 850th problem solved on LC. It involves XOR and subsets. I'm sure there is a better way to do it but since the constraints are very small, a quick way was to generate all the subsets (standard iterative (not recursive!) code) and perform the respective XOR operations. Works well. Problem and code are down below - cheers! ACC.

Sum of All Subset XOR Totals - LeetCode

1863. Sum of All Subset XOR Totals
Easy

The XOR total of an array is defined as the bitwise XOR of all its elements, or 0 if the array is empty.

  • For example, the XOR total of the array [2,5,6] is 2 XOR 5 XOR 6 = 1.

Given an array nums, return the sum of all XOR totals for every subset of nums

Note: Subsets with the same elements should be counted multiple times.

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.

 

Example 1:

Input: nums = [1,3]
Output: 6
Explanation: The 4 subsets of [1,3] are:
- The empty subset has an XOR total of 0.
- [1] has an XOR total of 1.
- [3] has an XOR total of 3.
- [1,3] has an XOR total of 1 XOR 3 = 2.
0 + 1 + 3 + 2 = 6

Example 2:

Input: nums = [5,1,6]
Output: 28
Explanation: The 8 subsets of [5,1,6] are:
- The empty subset has an XOR total of 0.
- [5] has an XOR total of 5.
- [1] has an XOR total of 1.
- [6] has an XOR total of 6.
- [5,1] has an XOR total of 5 XOR 1 = 4.
- [5,6] has an XOR total of 5 XOR 6 = 3.
- [1,6] has an XOR total of 1 XOR 6 = 7.
- [5,1,6] has an XOR total of 5 XOR 1 XOR 6 = 2.
0 + 5 + 1 + 6 + 4 + 3 + 7 + 2 = 28

Example 3:

Input: nums = [3,4,5,6,7,8]
Output: 480
Explanation: The sum of all XOR totals for every subset is 480.

 

Constraints:

  • 1 <= nums.length <= 12
  • 1 <= nums[i] <= 20
Accepted
6,566
Submissions
7,860

public int SubsetXORSum(int[] nums)
{
    int n = (int)Math.Pow(2, nums.Length);

    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        int xor = 0;
        int k = i;
        int index = nums.Length - 1;
        while (k > 0)
        {
            if (k % 2 == 1)
            {
                xor ^= nums[index];
            }
            k /= 2;
            index--;
        }
        sum += xor;
    }

    return sum;
}

Comments

Popular posts from this blog

Advent of Code - Day 6, 2024: BFS and FSM

Golang vs. C#: performance characteristics (simple case study)

Advent of Code - Day 7, 2024: Backtracking and Eval