78. 子集
考点
- 状态压缩
- 排列组合
题解
1 | class Solution { |
时间复杂度:\(O\left( 2^n\cdot n \right)\)
空间复杂度:\(O\left( n \right)\)
思路
题目已经表明,数组中的元素互不相同,故而不会产生重复的子集
数组中的每个元素都有取与不取两种状态,使用比特位1代表取状态、比特位0代表不取状态
若nums
数组长度为n
,按照数学的组合规律则共有2n个子集,可以用\(\left[ 0,2^n-1
\right]\)范围内的十进制整数来表达
假设有数组{1,2,3}
,子集表达如下:
十进制表达 | 二进制表达 | 子集 |
---|---|---|
0 | 000 | {} |
1 | 001 | {3} |
2 | 010 | {2} |
3 | 011 | {2,3} |
4 | 100 | {1} |
5 | 101 | {1,3} |
6 | 110 | {1,2} |
7 | 111 | {1,2,3} |