解题思路:
本文要遍历所有子集,所以可以考虑回溯法,因为每一个都会被遍历到,而且方便筛选符合条件的结果
- 注意:
1.结果反回值的处理
2.递归退出的条件
3.加入路径的筛选
class Solution {
public:
int subsetXORSum(vector<int>& nums) {
int res = 0;
vector<int> path;
trace(nums,path,res,0);
return res;
}
private:
void trace (const vector<int> &nums,vector<int> &path,int &res,int pos){
// 结果返回值的计算
if(path.size()>=1){
int temp=0;
for(int i = 0;i<path.size();++i){
temp = temp^path[i];
}
res += temp;
}
//满足条件退出递归
if(path.size()==nums.size()){
return;
}
// 回溯的循环,上面的递归条件也可以不写,因为这里同样可以结束递归
for(int i = pos;i<nums.size();++i){
//筛选是否要加入
path.push_back(nums[i]);
//进入树的下一层
trace(nums,path,res,i+1);
//返回到上一层
path.pop_back();
}
}
};