当前位置:   article > 正文

Leetcode刷题笔记题解(C++):1863. 找出所有子集的异或总和再求和_找回所有子集的异或

找回所有子集的异或

思路如下:递归思路,依次遍历数组中的数,当前数要不要选择像二叉树一样去遍历如下图所示

                                                      0

                                        0 (选5)               5(不选5)

                               0              1               0                1

                        0          6     0       6     0        6         0      6

                        0+6+1+7+5+3+4+2=28

  1. class Solution {
  2. public:
  3. int res = 0;
  4. int n = 0;
  5. int subsetXORSum(vector<int>& nums) {
  6. n = nums.size();
  7. dfs(nums,0,0);
  8. return res;
  9. }
  10. void dfs(vector<int>& nums,int val,int idx){
  11. //如果到数组尾部,则加上或与的和
  12. if(idx == n){
  13. res += val;
  14. return;
  15. }
  16. //选择当前节点
  17. dfs(nums,val^nums[idx],idx+1);
  18. //不选择当前节点
  19. dfs(nums,val,idx+1);
  20. }
  21. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/799431
推荐阅读
相关标签
  

闽ICP备14008679号