Subsets
Medium
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3]
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
题意
给定一组数字,求这组数字的所有子集
思路
对于长度为n的集合,每个元素都有“放入子集”和“不放入子集”两种选择,故而总共有2^n 个子集。i从0遍历到2^n -1,将i同代表原集合中第j个元素的one-hot值相与,非0则说明第j个元素放入子集,否则说明第j个元素不放入子集
代码
func subsets(nums []int) [][]int {
n := uint(len(nums))
if n == 0 {
ret := make([][]int, 1)
ret[0] = make([]int, 0)
return ret
}
t := uint(1 << n)
ret := make([][]int, t)
for i:=uint(0); i<t; i++ {
ret[i] = make([]int, 0)
dig := uint(1)
for j:=uint(0); j<n; j++ {
if dig > i {
break
}
if i & dig != 0 {
ret[i] = append(ret[i], nums[j])
}
dig <<= 1
}
}
return ret
}