Leetcode5759. 找出所有子集的异或总和再求和(二进制模拟暴搜)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode5759. 找出所有子集的异或总和再求和(二进制模拟暴搜)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/sum-of-all-subset-xor-totals/
解题思路
我们可以用一个数i
(
0
≤
i
≤
2
n
−
1
)
(0 \\leq i \\leq 2^n - 1)
(0≤i≤2n−1)表示一个集合,数i
的第j
位表示第j
个数是否属于当前枚举的集合,如果属于就进行异或操作。
代码
class Solution {
public int subsetXORSum(int[] nums) {
int n = nums.length;
int res = 0;
for (int i = 0; i < 1 << n; i ++ ) { //i从0~2^n - 1
int s = 0;
for (int j = 0; j < n; j ++ ) //判断每一位是否属于当前集合
if ((i >> j & 1) != 0) //如果是1则属于该集合
s ^= nums[j];
res += s; //将每次结果加入答案
}
return res;
}
}
复杂度分析
- 时间复杂度:O( 2 n ∗ n 2^n * n 2n∗n)
- 空间复杂度:O(1)
以上是关于Leetcode5759. 找出所有子集的异或总和再求和(二进制模拟暴搜)的主要内容,如果未能解决你的问题,请参考以下文章
算法学习1863. 找出所有子集的异或总和再求和(java / c / c++ / python / go / rust)
算法学习1863. 找出所有子集的异或总和再求和(java / c / c++ / python / go / rust)