78 题新增位运算的解法

This commit is contained in:
Images。
2019-12-27 11:35:34 +08:00
committed by GitHub
parent 7e31f0d803
commit be4b26bf18

View File

@@ -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
}