We need to find all unique values of nums[i] ^ nums[j] ^ nums[k] for i ≤ j ≤ k. Since n ≤ 1500, a triple loop is feasible, and we can use a set to collect unique results.
classSolution {
public:int countTriplets(vector<int>& nums) {
unordered_set<int> s;
int n = nums.size();
for (int i =0; i < n; ++i) {
for (int j = i; j < n; ++j) {
int x = nums[i];
for (int k = j; k < n; ++k) {
x ^= (k == j ?0: nums[k]);
s.insert(x);
}
}
}
return s.size();
}
};
classSolution {
publicintcountTriplets(int[] nums) {
Set<Integer> s =new HashSet<>();
int n = nums.length;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int x = nums[i];
for (int k = j; k < n; k++) {
if (k > j) x ^= nums[k];
s.add(x);
}
}
}
return s.size();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
classSolution {
funcountTriplets(nums: IntArray): Int {
val s = mutableSetOf<Int>()
val n = nums.size
for (i in0 until n) {
for (j in i until n) {
var x = nums[i]
for (k in j until n) {
if (k > j) x = x xor nums[k]
s.add(x)
}
}
}
return s.size
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution:
defcountTriplets(self, nums: list[int]) -> int:
s = set()
n = len(nums)
for i in range(n):
for j in range(i, n):
x = nums[i]
for k in range(j, n):
if k > j:
x ^= nums[k]
s.add(x)
return len(s)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use std::collections::HashSet;
impl Solution {
pubfncount_triplets(nums: Vec<i32>) -> i32 {
letmut s = HashSet::new();
let n = nums.len();
for i in0..n {
for j in i..n {
letmut x = nums[i];
for k in j..n {
if k > j { x ^= nums[k]; }
s.insert(x);
}
}
}
s.len() asi32 }
}