商场设计与商品陈列郑州seo优化服务
1863. 找出所有子集的异或总和再求和 - 力扣(LeetCode)
一个数组的 异或总和 定义为数组中所有元素按位 XOR
的结果;如果数组为 空 ,则异或总和为 0
。
- 例如,数组
[2,5,6]
的 异或总和 为2 XOR 5 XOR 6 = 1
。
给你一个数组 nums
,请你求出 nums
中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。
思路:
1.先找出元素所有子集
2.遍历每个子集,求出异或和,汇总
class Solution {
public:int subsetXORSum(vector<int>& nums) {int n=nums.size();int probNum=1<<n;vector<vector<int>>subsets;for(int i=0;i<probNum;i++){vector<int>item;for(int j=0;j<n;j++){//当前j元素被包含在生成的子集中if(i&(1<<j)){item.push_back(nums[j]);}}subsets.push_back(item);}int res=0;//遍历子集,求异或和for(auto item:subsets){//如果子集大小为1,异或和为它本身if(item.size()==1)res+=item[0];else if(item.size()>1){int tmp=item[0];for(int i=1;i<item.size();i++)tmp=tmp^item[i];res+=tmp;}}return res;}
};