一. 问题描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
二. 解题思路
解题思路:采用回溯算法进行求解。递归函数(全局列表list,局部列表temlist,数组num,temlist最后一位的位数k)
步骤一:首先构建上述所示递归函数,递归函数判断条件是(每次进行递归时都输出temlist)
步骤二:在往temlist添加数据时,需要进行判断k是否小于添加数据的数组位数。是:添加,否:跳过。
步骤三:重复上述两个步骤。
三. 执行结果
执行用时 :1 ms, 在所有 java 提交中击败了99.77%的用户
内存消耗 :36.2 MB, 在所有 java 提交中击败了60.10%的用户
四. Java代码
class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> list=new ArrayList<List<Integer>>(); List<Integer> temlist=new ArrayList<Integer>(); com(list,temlist,nums,-1); return list; } public void com(List<List<Integer>> list,List<Integer> temlist, int[] num,int k) { list.add(temlist); for(int i=k+1;i<num.length;i++) { List<Integer> atemlist=new ArrayList<Integer>(temlist); atemlist.add(num[i]); int m=i; com(list,atemlist,num,m); } } }