diff --git a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md index 9c8a608b9..dd9e6e082 100755 --- a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md +++ b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md @@ -1,28 +1,53 @@ # [1863.Sum of All Subset XOR Totals][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +The **XOR total** of an array is defined as the bitwise XOR of **all its elements**, or `0` if the array is **empty**. + +- For example, the **XOR total** of the array `[2,5,6]` is `2 XOR 5 XOR 6 = 1`. + +Given an array `nums`, return the **sum** of all **XOR totals** for every **subset** of `nums`. + +**Note**: Subsets with the **same** elements should be counted **multiple** times. + +An array `a` is a **subset** of an array `b` if `a` can be obtained from `b` by deleting some (possibly zero) elements of `b`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3] +Output: 6 +Explanation: The 4 subsets of [1,3] are: +- The empty subset has an XOR total of 0. +- [1] has an XOR total of 1. +- [3] has an XOR total of 3. +- [1,3] has an XOR total of 1 XOR 3 = 2. +0 + 1 + 3 + 2 = 6 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Sum of All Subset XOR Totals -```go ``` +Input: nums = [5,1,6] +Output: 28 +Explanation: The 8 subsets of [5,1,6] are: +- The empty subset has an XOR total of 0. +- [5] has an XOR total of 5. +- [1] has an XOR total of 1. +- [6] has an XOR total of 6. +- [5,1] has an XOR total of 5 XOR 1 = 4. +- [5,6] has an XOR total of 5 XOR 6 = 3. +- [1,6] has an XOR total of 1 XOR 6 = 7. +- [5,1,6] has an XOR total of 5 XOR 1 XOR 6 = 2. +0 + 5 + 1 + 6 + 4 + 3 + 7 + 2 = 28 +``` + +**Example 3:** +``` +Input: nums = [3,4,5,6,7,8] +Output: 480 +Explanation: The sum of all XOR totals for every subset is 480. +``` ## 结语 diff --git a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go index d115ccf5e..9b071cbcb 100644 --- a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go +++ b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + ans := 0 + for i := 0; i < len(nums); i++ { + // l = 1 + ans += nums[i] + } + + var selector func(int, int, int) + selector = func(index, l, cur int) { + if l == 0 { + ans += cur + return + } + if index == len(nums) { + return + } + + selector(index+1, l, cur) + selector(index+1, l-1, cur^nums[index]) + } + for l := 2; l <= len(nums); l++ { + selector(0, l, 0) + } + return ans } diff --git a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go index 14ff50eb4..e93a15116 100644 --- a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go +++ b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3}, 6}, + {"TestCase2", []int{5, 1, 6}, 28}, + {"TestCase3", []int{3, 4, 5, 6, 7, 8}, 480}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }