美文网首页数据结构和算法分析数据结构与算法
Leetcode-1863 找出所有子集的异或总和再求和

Leetcode-1863 找出所有子集的异或总和再求和

作者: itbird01 | 来源:发表于2021-11-19 07:17 被阅读0次

1863. 找出所有子集的异或总和再求和

解题思路

1.求子集个数,可以知道子集总共有2^n个
2.0~2^n,对应的二进制个数,分别对应0和1,1代表数组此位生效,0不生效,依次来得到所有的子集
3.由题意可知,1 <= nums.length <= 12,所以2的平方,不会超过int最大值
4.如果二进制的长度小于nums.length,需要补全头部的0

解题遇到的问题

1.求子集个数,可以借助二进制

后续需要总结学习的知识点

1.解法1,需要后续优化


image.png
##解法1
class Solution {
    public static void main(String[] args) {
        System.out.println(subsetXORSum(new int[] {3,4,5,6,7,8}));
    }

    public static int subsetXORSum(int[] nums) {
        // 求子集个数,可以知道子集总共有2^n个
        // 0~2^n,对应的二进制个数,分别对应0和1,1代表数组此位生效,0不生效,依次来得到所有的子集
        // 由题意可知,1 <= nums.length <= 12,所以2的平方,不会超过int最大值
        int result = 0;
        for (int i = 0; i < Math.pow(2, nums.length); i++) {
            StringBuilder value = new StringBuilder(Integer.toBinaryString(i));
            // 如果二进制的长度小于nums.length,需要补全头部的0
            if (value.length() < nums.length) {
                int size = nums.length - value.length();
                for (int j = 0; j < size; j++) {
                    value.insert(0, '0');
                }
            }
            int temp = 0;
            for (int j = 0; j < value.length(); j++) {
                if (value.charAt(j) == '1') {
                    temp ^= nums[j];
                }
            }
            result += temp;
        }
        return result;
    }
}

相关文章

  • Leetcode-1863 找出所有子集的异或总和再求和

    1863. 找出所有子集的异或总和再求和[https://leetcode-cn.com/problems/sum...

  • IOS 算法(基础篇) ----- 找出所有子集的异或总和再求

    给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。注意:在...

  • LeetCode 389. Find the Differenc

    找出两个string中的单一值,使用异或操作,两个相同的值异或等于零,把两个string中的所有值都做异或操作,最...

  • 力扣 90 子集 II

    题意:找出一个array的所有子集 思路: 把array排序 dfs找出所有的组合 每次dfs中遍历index之后...

  • Leetcode-268题:Missing Number

    利用公式 利用(首项+末项)*项数/2 代码 位运算 0-n异或,再对所有数字异或 代码

  • 2021-03-18 只出现一次的数字

    题目[https://leetcode-cn.com/leetb] 使用异或运算,将所有值进行异或 异或运算,相异...

  • 数学问题整理

    和号交换 两个连续的求和符号可以交换,可理解为对一个表先对列求和,再对行求和或先对行求和,再对列求和,这两种不同的...

  • 位的"异或"

    “异或”操作的本质其实就是,所有数值和自身进行按位的“异或”操作之后都为 0。而且要通过“异或”操作得到 0...

  • 位运算

    异或 ^相同为0,不同为1。相当于无进位的求和。想象10进制下的模拟情况:(如:19+1=20;无进位求和就是1...

  • 自己写的Array method

    Array method总结 1: 父集 子集 找出子集和父集的余集 /** * 获取集合的补集 * arr1 ...

网友评论

    本文标题:Leetcode-1863 找出所有子集的异或总和再求和

    本文链接:https://www.haomeiwen.com/subject/ulixzltx.html