funcsubsets(nums []int) (ans [][]int) { n :=len(nums)for p :=0; p <1<<n; p++ {var a []intfor i, num :=range nums {if p>>i&1>0 { a =append(a, num) } } ans =append(ans, a) }return}
Approach #1
funcsubsets(nums []int) (ans [][]int) { n :=len(nums)var tmp []intvar dfs func(int) dfs =func(cur int) {if cur == n { ans =append(ans, append([]int(nil), tmp...))return } tmp =append(tmp, nums[cur])dfs(cur +1) tmp = tmp[:len(tmp)-1]dfs(cur +1) }dfs(0)return}
funcsubsetsWithDup(nums []int) (ans [][]int) { sort.Ints(nums) n :=len(nums)outer:for p :=0; p <1<<n; p++ {var a []intfor i, num :=range nums {if p>>i&1>0 {if i >0&& p>>(i-1)&1==0&& nums[i-1] == num {continue outer } a =append(a, num) } } ans =append(ans, append([]int(nil), a...)) }return}
Approach #1
funcsubsetsWithDup(nums []int) (ans [][]int) { sort.Ints(nums) n :=len(nums)var tmp []intvar dfs func(bool, int) dfs =func(choosePre bool, cur int) {if cur == n { ans =append(ans, append([]int(nil), tmp...))return }dfs(false, cur+1)if!choosePre && cur >0&& nums[cur-1] == nums[cur] {return } tmp =append(tmp, nums[cur])dfs(true, cur+1) tmp = tmp[:len(tmp)-1] }dfs(false, 0)return}