From be4b26bf189b21381fd10e68261bddc0bcc83930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Images=E3=80=82?= <613366667@qq.com> Date: Fri, 27 Dec 2019 11:35:34 +0800 Subject: [PATCH] =?UTF-8?q?=2078=20=E9=A2=98=E6=96=B0=E5=A2=9E=E4=BD=8D?= =?UTF-8?q?=E8=BF=90=E7=AE=97=E7=9A=84=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Algorithms/0078. Subsets/78. Subsets.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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 +}