给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
观察全排列/组合/子集问题,它们比较相似,且可以使用一些通用策略解决。
首先,它们的解空间非常大:
-
全排列:N!。
-
组合:N!。
-
子集:2^N,每个元素都可能存在或不存在。
-
在它们的指数级解法中,要确保生成的结果 完整 且 无冗余,有三种常用的方法:
递归
回溯
基于二进制位掩码和对应位掩码之间的映射字典生成排列/组合/子集
相比前两种方法,第三种方法将每种情况都简化为二进制数,易于实现和验证。
此外,第三种方法具有最优的时间复杂度,可以生成按照字典顺序的输出结果。