LeetCode - #子集

一题目描述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

思路一:回溯法
先处理[],递归遍历nums,遍历一次进行一次for循环,添加一个元素后继续递归遍历,然后再将此元素移除。
1
1——2
1——2——3
1——2
1
null
2
2——3
2
null
3

三、代码实现

思路一代码:

class Solution {

    List<List<Integer>> list = new ArrayList<>();

    Set<Integer> subSets = new HashSet<>();

    public List<List<Integer>> subsets(int[] nums) {
        list.add(new ArrayList<>(subSets));
        backTrack(0, nums, list, subSets);
        return list;
    }
    public void backTrack(int index, int[] nums, List<List<Integer>> list, Set<Integer> subSets){
        if(nums.length <= index){
            return;
        }
        for(int i = index; i < nums.length; i++){
            subSets.add(nums[i]);
            list.add(new ArrayList<>(subSets));
            backTrack(i + 1, nums, list, subSets);
            subSets.remove(nums[i]);
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。