The XOR total of an array is defined as the bitwise XOR of all its elements, or 0 if the array is empty.
[2,5,6] is 2 XOR 5 XOR 6 = 1.You are 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 = [2,4]
Output: 12Explanation: The four subsets of [2,4] are
Example 2:
Input: [3,1,1]
Output: 12Explanation: The eight subsets of [3,1,1] are
Constraints:
1 <= nums.length <= 121 <= nums[i] <= 20class Solution:
def subsetXORSum(self, nums: List[int]) -> int:
res = 0
def backtrack(i, subset):
nonlocal res
xorr = 0
for num in subset:
xorr ^= num
res += xorr
for j in range(i, len(nums)):
subset.append(nums[j])
backtrack(j + 1, subset)
subset.pop()
backtrack(0, [])
return resclass Solution:
def subsetXORSum(self, nums: List[int]) -> int:
def dfs(i, total):
if i == len(nums):
return total
return dfs(i + 1, total ^ nums[i]) + dfs(i + 1, total)
return dfs(0, 0)class Solution:
def subsetXORSum(self, nums: List[int]) -> int:
n = len(nums)
res = 0
for mask in range(1 << n):
xorr = 0
for i in range(n):
if mask & (1 << i):
xorr ^= nums[i]
res += xorr
return resclass Solution:
def subsetXORSum(self, nums: List[int]) -> int:
res = 0
for num in nums:
res |= num
return res << (len(nums) - 1)