diff --git a/Algorithms/0078. Subsets/78. Subsets.go b/Algorithms/0078. Subsets/78. Subsets.go index f69f541f..196376e2 100644 --- a/Algorithms/0078. Subsets/78. Subsets.go +++ b/Algorithms/0078. Subsets/78. Subsets.go @@ -41,3 +41,24 @@ func subsets1(nums []int) [][]int { } return res } + +// 解法三:位运算的方法 +func subsets2(nums []int) [][]int { + if len(nums) == 0 { + return nil + } + res := [][]int{} + sum := 1 << uint(len(nums)) + for i := 0; i < sum; i++ { + stack := []int{} + tmp := i // i 从 000...000 到 111...111 + for j := len(nums) - 1; j >= 0; j-- { // 遍历 i 的每一位 + if tmp & 1 == 1 { + stack = append([]int{nums[j]}, stack...) + } + tmp >>= 1 + } + res = append(res, stack) + } + return res +}