給定一組不含重復(fù)元素的整數(shù)數(shù)組 nums,返回該數(shù)組所有可能的子集(冪集)。
說明:解集不能包含重復(fù)的子集。
示例:
輸入: nums = [1,2,3]
輸出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
這道題目是有一點(diǎn)陷阱的意思
實(shí)際上一個(gè)數(shù)組長度為n,
那么這個(gè)數(shù)組的子集就有2的n次方個(gè)
所以可以用位運(yùn)算來解決,
一共是n位,
每一位代表的是一個(gè)數(shù)組中的對(duì)應(yīng)的一個(gè)元素,
然后能得出一個(gè)數(shù),
把這些所有的數(shù)組合起來 就是答案了
class Solution {
func subsets(_ nums: [Int]) -> [[Int]] {
let count = 1 << nums.count
var res = [[Int]].init()
for n in 0..<count {
var index = 0
var temp = n
var tempArray = [Int].init()
while (temp >> index) > 0 {
if ( temp >> index ) & 0b01 == 1 {
tempArray.append(nums[index])
}
index = index + 1
}
res.append(tempArray)
}
return res
}
}