Middle-题目57:90. Subsets II

原创 2016年05月31日 16:28:20

题目原文:
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
题目大意:
Middle-题目52,但这里面的数组会有重复元素,但子集中仍不允许有重复元素。
题目分析:
这次适合回溯法,但要注意,如果遇到当前数字和前一个数字相同,则跳过去。
使用backtrack(int[] nums, int index, List<List<Integer>> result, List<Integer> sublist)函数记录搜索过程,其中index记录当前搜索到的数字的索引(相同时索引取最后一个),那么如果循环时nums[i]==nums[i-1]时则跳过。
源码:(language:java)

public class Solution {
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> result = new ArrayList<> ();
        if(nums == null) {
            return result;
        }
        Arrays.sort(nums);
        backtrack(nums, 0, result, new ArrayList<Integer> ());
        return result;
    }

    private void backtrack(int[] nums, int index, List<List<Integer>> result, List<Integer> sublist) {
        if(index <= nums.length) {
            result.add(new ArrayList<> (sublist));
        }
        for(int i = index; i < nums.length; i++) {
            if(i != index && nums[i] == nums[i - 1]) {
                continue;
            }
            sublist.add(nums[i]);
            backtrack(nums, i + 1, result, sublist);
            sublist.remove(sublist.size() - 1);
        }
    }
}

成绩:
3ms,beats 41.85%,众数3ms,41.53%
Cmershen的碎碎念:
一个较笨的办法就是在上一题的基础上判断是否存在这个集合序列,但时间长达37ms,因为这样会搜出很多无效解。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

LeetCode90:Subsets II

Given a collection of integers that might contain duplicates, nums, return all possible subsets.Note...
  • u012501459
  • u012501459
  • 2015年07月08日 11:12
  • 1099

leetcode解题之 77. Combinations&78. Subsets&90. Subsets II java 版(求所有子集)

leetcode解题之 Subsets java 版(求所有子集) ,90. Subsets II ,78. Subsets,77. Combinations...
  • mine_song
  • mine_song
  • 2017年04月08日 19:36
  • 390

[LeetCode 90] Subsets II

题目链接:subsets-ii import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; ...
  • ever223
  • ever223
  • 2015年03月28日 00:32
  • 1033

LeetCode 90:Subsets II

Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...
  • geekmanong
  • geekmanong
  • 2016年01月25日 17:09
  • 2045

90. Subsets II

Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
  • sjt091110317
  • sjt091110317
  • 2014年03月05日 17:24
  • 634

Subsets II -- LeetCode

原题链接: http://oj.leetcode.com/problems/subsets-ii/ 这道题跟Subsets一样是经典的NP问题--求子集。比Subsets稍微复杂一些的是这里的集合中...
  • linhuanmars
  • linhuanmars
  • 2014年04月28日 04:23
  • 11881

【LeetCode with Python】 Subsets II

Given a collection of integers that might contain duplicates, S, return all possible subsets. Note:...
  • nerv3x3
  • nerv3x3
  • 2014年07月04日 16:11
  • 1754

Leetcode: Subsets II

Given a collection of integers that might contain duplicates, S, return all possible subsets. Note:...
  • doc_sgl
  • doc_sgl
  • 2013年10月03日 22:05
  • 4484

LeetCode Subsets 和 LeetCode Subsets II

LeetCode Subsets 和 LeetCode Subsets II 给出一个数组生成该数组所有元素的组合。 基本思路先对数组排序,然后循环+dfs,生成指定元素数目为:1,2,...arr...
  • worldwindjp
  • worldwindjp
  • 2014年04月09日 22:02
  • 10667

90. Subsets II**

Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...
  • alwaystry
  • alwaystry
  • 2017年01月14日 22:07
  • 130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目57:90. Subsets II
举报原因:
原因补充:

(最多只允许输入30个字)