Sum of All Subset XOR Totals

easy backtracking bit

Problem

Compute the sum, over every subset of nums, of the XOR of its elements.

Inputnums = [1,3]
Output6
Subsets {}, {1}, {3}, {1,3} → XORs 0, 1, 3, 2 → 6.

def subset_xor_sum(nums):
    total = 0
    def dfs(i, cur):
        nonlocal total
        if i == len(nums):
            total += cur
            return
        dfs(i + 1, cur ^ nums[i])
        dfs(i + 1, cur)
    dfs(0, 0)
    return total
function subsetXORSum(nums) {
  let total = 0;
  function dfs(i, cur) {
    if (i === nums.length) { total += cur; return; }
    dfs(i + 1, cur ^ nums[i]);
    dfs(i + 1, cur);
  }
  dfs(0, 0);
  return total;
}
class Solution {
    int total;
    int[] nums;
    void dfs(int i, int cur) {
        if (i == nums.length) { total += cur; return; }
        dfs(i + 1, cur ^ nums[i]);
        dfs(i + 1, cur);
    }
    public int subsetXORSum(int[] nums) {
        this.nums = nums; total = 0;
        dfs(0, 0);
        return total;
    }
}
class Solution {
    int total = 0;
    vector<int> nums;
    void dfs(int i, int cur) {
        if (i == (int)nums.size()) { total += cur; return; }
        dfs(i + 1, cur ^ nums[i]);
        dfs(i + 1, cur);
    }
public:
    int subsetXORSum(vector<int>& a) { nums = a; total = 0; dfs(0, 0); return total; }
};
Time: O(2^n) Space: O(n)