key idea is how to generate all subset of array.
take 3 elements of arrays for example,
[a, _, _] -> [1, 0, 0]
[_, b, _] -> [0, 1, 0]
[a, b, _] -> [1, 1, 0]
[_, _, c] -> [0, 0, 1]
[a, _, c] -> [1, 0, 1]
[_, b, c] -> [0, 1, 1]
[a, b, c] -> [1, 1, 1]
integer i is loop through 1 to Math.pow(2, nums.length) – 1, for each integer, we check how many 1 bit
i & 1, if it is 1, we get nums[index] out as elements for subarray.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Solution {
public int subsetXORSum(int[] nums) {
int result = 0;
int x = (int)Math.pow(2, nums.length) - 1;
for(int i=1;i<=x;i++) {
int p = i;
int r = 0;
for(int j=0;j<nums.length;j++) {
int t = p & 1;
p >>= 1;
if (t == 1) {
r ^= nums[j];
}
}
result += r;
}
return result;
}
} |
class Solution {
public int subsetXORSum(int[] nums) {
int result = 0;
int x = (int)Math.pow(2, nums.length) - 1;
for(int i=1;i<=x;i++) {
int p = i;
int r = 0;
for(int j=0;j<nums.length;j++) {
int t = p & 1;
p >>= 1;
if (t == 1) {
r ^= nums[j];
}
}
result += r;
}
return result;
}
}