关闭

懒人读算法(九)-所有子集(有重复)

标签: 算法
94人阅读 评论(0) 收藏 举报
分类:

趣味题

承接上一题:
当有重复的数组出现时,该如果求出所有的子集
如: nums = [1,2,2]
需返回:

// [
//   [2],
//   [1],
//   [1,2,2],
//   [2,2],
//   [1,2],
//   []
// ]

答案:


public class Solution {

    public List<List<Integer>> subsetsWithDup(int[] nums) {

        Arrays.sort(nums);

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

        if(nums.length == 0 || nums == null) return result;

        helper(nums, new ArrayList<Integer>(), 0, result);

        return result;

    }


    public void helper(int[] nums, ArrayList<Integer> current, int index, List<List<Integer>> result) {

        result.add(current);

        for(int i = index; i < nums.length; i++) {

            if(i > index && nums[i] == nums[i - 1]) continue;

            ArrayList<Integer> newCurrent = new ArrayList<Integer>(current);
            newCurrent.add(nums[i]);
            helper(nums, newCurrent, i + 1, result);

        }

    }

}

解答:递归算法虽然难懂,但花点时间还是值得的

0
0
查看评论

懒人读算法(八)-所有子集

趣味题给一个唯一的数组,返回所有该数组的子集 例如 nums=[1,2,3] 返回: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]答案: public class Solution {...
  • u011747152
  • u011747152
  • 2017-10-13 10:33
  • 117

C语言算法—(生成子集的升级)生成数据的全部组合(含重复数字)(类似建立树的回溯法)

继上篇文章(生成子集)之后,我们来看类似于此种算法的另一种功能算法:生成固定数据的全部组合; 先上算法:#include<stdio.h> #include<malloc.h> int n; int sum; void build(int *a,int *top,int m...
  • Vernon917
  • Vernon917
  • 2017-03-26 23:17
  • 454

155.Subsets II (包含重复元素的数组的全部子集)

Given a collection of integers that might contain duplicates, nums, return all possible subsets. Note: The solution set must not contain du...
  • u010339647
  • u010339647
  • 2016-08-24 14:27
  • 352

lintcode-带重复元素的子集-18

给定一个可能具有重复数字的列表,返回其所有可能的子集 样例 如果S = [1,2,2],一个可能的答案为: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 注意 子集中的每个元素都是非降序的 ...
  • ljlstart
  • ljlstart
  • 2015-10-09 20:47
  • 1059

求集合的所有子集的算法

求集合的所有子集的算法对于任意集合A,元素个数为n(空集n=0),其所有子集的个数为2^n个如集合A={a,b,c},其子集个数为8;对于任意一个元素,在每个子集中,要么存在,要么不存在,对应关系是:a->1或a->0b->1或b->0c->1或c->0映射为子集...
  • yzl20092856
  • yzl20092856
  • 2014-10-11 15:30
  • 2283

输出集合{1,2,...,n}的所有子集

输出集合{1,2,…,n}的所有子集基于完全二叉树的深度优先搜索 以集合{1,2,3}为例: 基于bit pattern 对于一个含有n个元素的集合,可以用一个n位的2进制数来表这个集合,第i为1表示第i个元素在表示的集合中,否则不在 。 按字典顺序排序 排在集合{X,j,i}\...
  • unclerunning
  • unclerunning
  • 2016-04-10 12:16
  • 1524

集合的所有子集的算法

转载自:http://blog.csdn.net/yzl20092856/article/details/39995085 求集合的所有子集的算法 对于任意集合A,元素个数为n(空集n=0),其所有子集的个数为2^n个 如集合A={a,b,c},其子集个数为8;对于任意一个元素,在每个子集...
  • u010551600
  • u010551600
  • 2017-09-07 20:52
  • 274

【新手向】最大团问题和最大独立子集的懒人算法(随机化)

不要去百度百科找最大团,因为你会找到一个团购网站= = 维基百科:https://en.wikipedia.org/wiki/Clique_problem首先,团是什么呢? 团就是一个点集,点集中任意两点都有直接的边相连 举个栗子: 图中红色的点构成了一个团,当然单独一个点也算是一个团。那么...
  • FAreStorm
  • FAreStorm
  • 2015-10-07 16:48
  • 1878

C语言算法—生成数集的所有子集(类似建立树的回溯法)

#include<stdio.h> #include<malloc.h> int N; void build(int *a,int *tag,int n) { if(n==N) { printf("{"); ...
  • Vernon917
  • Vernon917
  • 2017-03-25 00:03
  • 622

带重复元素的子集

给定一个可能具有重复数字的列表,返回其所有可能的子集 样例 如果S = [1,2,2],一个可能的答案为: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 注意 子集中的每个元素都是非降序的 两个子集间的顺序...
  • brucehb
  • brucehb
  • 2015-09-23 01:59
  • 326
    个人资料
    • 访问:18850次
    • 积分:2383
    • 等级:
    • 排名:第18415名
    • 原创:226篇
    • 转载:0篇
    • 译文:1篇
    • 评论:0条