给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
解题思路:刚开始考虑使用递归方法,分析的过程中遇到很多弯弯绕绕,翻了一些提示也看的有点模糊,所以索性采取另外一种方式,通过将子集图形化,例如000表示123都没有,111表示123都有,010表示只有2……以此类推,这样的话就需要先把0~7的数字表示成二进制,然后通过判断二进制的某一位是否为1,进行结果输出,不需要使用递归,时间复杂度为O(n^2)
/** 用图形化的方式来考虑问题:
* 1 2的子集有4个,分别为
* [] 0 0
* [1] 1 0
* [2] 0 1
* [1,2] 1 1
* 1 2 3的子集有8个,分别为(0表示没有,1表示有)
* [] 0 0 0
* [1] 1 0 0
* [2] 0 1 0
* [3] 0 0 1
* [1,2] 1 1 0
* [1,3] 1 0 1
* [2,3] 0 1 1
* [1,2,3] 1 1 1
*/
public static List<List<Integer>> subsets(int[