第78题:子集

一. 问题描述

给定一组不含重复元素的整数数组 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);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/xiaobaidashu/p/11718395.html