Problem#
給一個 array size = $N$ e.g. [1, 2, 3]
要回傳它的所有可能的子集合(Power set) e.g. [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
想法#
如果用 bit 來表示位置 $i$ 是否有出現,則問題就是數數字 $[0, 2^N]$,每個數字代表一種子集合的狀態
1 | array = {1, 2, 3} |
- 時間複雜度: $\mathcal{O}(N\cdot 2^N)$
AC Code#
賞析#
-
bitmask
- https://leetcode.com/problems/subsets/discuss/1766969/C%2B%2B-oror-100-faster-solution-(0-ms)-oror-Bit-Manipulation-oror-Easy-to-understand
- 用
1 << N
來替代(int)pow(2, N)
a << b = a * pow(2, b)
a >> b = a / pow(2, b)
-
backtracking
- TODO