首页 > 其他分享 >刷刷刷 Day 28 | 90. 子集 II

刷刷刷 Day 28 | 90. 子集 II

时间:2023-01-29 23:11:07浏览次数:51  
标签:nums int 28 II start 子集 path 90

90. 子集 II

LeetCode题目要求

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
解题思路

本题是 组合总和II子集 的结合体。

上代码

class Solution {

    List<List<Integer>> res = new ArrayList<>();
    Deque<Integer> path = new LinkedList<>();
  
    public List<List<Integer>> subsetsWithDup( int[] nums ) {
        // 先排序
        Arrays.sort( nums );
        backtracking( nums, 0 );
        return res;
    }

    private void backtracking(int[] nums, int start ) {
        res.add( new ArrayList<>( path ) );

        for ( int i = start; i < nums.length; i++ ) {
            // 跳过当前树层使用过的、相同的元素
            if ( i > start && nums[i - 1] == nums[i] ) {
                continue;
            }
            path.add( nums[i] );
            subsetsWithDupHelper( nums, i + 1 );
            path.removeLast();
        }
    }
}

附:学习资料链接

标签:nums,int,28,II,start,子集,path,90
From: https://www.cnblogs.com/blacksonny/p/17074068.html

相关文章