LintCode 17.子集

/**
     * 描述 给定一个含不同整数的集合,返回其所有的子集 子集中的元素排列必须是非降序的,解集必须不包含重复的子集 样例 如果 S =
     * [1,2,3],有如下的解: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 挑战
     * 你可以同时用递归与非递归的方式解决么?
     */
    @Test
    public static List<List<Integer>> subsets(int[] nums) {
        // write your code here
        ArrayList<List<Integer>> res = new ArrayList<List<Integer>>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        if (nums == null || nums.length == 0) {
            return res;
        }
        res.add(list);
        Arrays.sort(nums);
        System.out.println("排序后的数组:" + nums.toString());
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < Math.pow(2, i); j++) {// 每一层的个数都是2的n次方
                System.out.println(Math.pow(2, i));
                List<Integer> temp = res.get(0);
                res.remove(0);// 把第一个取出来
                ArrayList<Integer> temp2 = new ArrayList<Integer>(temp);
                temp2.add(temp2.size(), nums[i]);
                res.add(temp2);// 加入一个数,放进去
                res.add(temp);// 不加数,放进去
            }
            System.out.println(res.toString());
        }
        System.out.println("最终:" + res.toString());
        return res;
    }

    public static void main(String[] args) {
        int[] nums = { 1, 2, 3 };
        subsets(nums);
    }

原文地址:https://www.cnblogs.com/lvjunlong/p/9367419.html

时间: 2024-10-22 03:21:54

LintCode 17.子集的相关文章

由LintCode问题子集出发,浅析ArrayList的拷贝问题

在做LintCode上的递归类题目子集时,我一开始的想法是递归到最后一层即单元素时然后开始逐层返回,产生相应的每层的子集并添加到最终的结果中去.于是乎有了以下代码: public List<List<Integer>> findSolution(int[] nums, int begin, int end){ List<List<Integer>> result = new ArrayList<>(); List<List<Integ

lintcode:子集 &amp; 带重复元素的子集

地址: http://lintcode.com/zh-cn/problem/subsets/ http://lintcode.com/zh-cn/problem/subsets-ii/ 子集 其实就是一颗子集树 class Solution { public: vector<vector<int>> res; vector<int> judge; int len; /* * @param nums: A set of numbers * @return: A list

【模板】子集生成 二进制法

此文为博主原创,转载时请通知博主,并把原文链接放在正文醒目位置. 子集生成问题:给出一个正整数n,输入含有1~n共n个元素的集合的所有子集. 模板代码(qwq表示空集): 1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstring> 5 6 inline void read(int &x) 7 { 8 char ch = getchar(),c = ch;

dfs 排列组合——找所有子集

17. 子集 中文 English 给定一个含不同整数的集合,返回其所有的子集. 样例 样例 1: 输入:[0] 输出: [ [], [0] ] 样例 2: 输入:[1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 挑战 你可以同时用递归与非递归的方式解决么? 注意事项 子集中的元素排列必须是非降序的,解集必须不包含重复的子集. 时间复杂度是O(2^n),本质就是在做二叉树的dfs.[1,2,3]举例: root /  

python初识 - day4

一.集合(set) 1.集合的定义 set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置, 因此不支持索引.分片等类序列的操作. 2.集合的创建 大括号或 set() 函数可以用来创建集合. 注意:想要创建空集合,你必须使用set() 而不是 {} . {}用于创建空字典 1 list = [1,3,2,4,2,5,7] 2 list = set(list) #将列表转成集合,集合用{}表示 3 print(list,type(list))#输出结果为

AnimeGAN输出日志

D:\MyFiles\LearnFiles\Code\Python\AnimeGAN\AnimeGAN>python main.py --phase train --dataset Hayao --epoch 1 --init_epoch 1D:\Users\feng_\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning:

lintcode 中等题:subsets II 带重复元素的子集

题目 带重复元素的子集 给定一个可能具有重复数字的列表,返回其所有可能的子集 样例 如果 S = [1,2,2],一个可能的答案为: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 注意 子集中的每个元素都是非降序的 两个子集间的顺序是无关紧要的 解集中不能包含重复子集 挑战 你可以同时用递归与非递归的方式解决么? 解题 一个很简单的想法就是在上一题目中增加判断是否已经存在某个子集 class Solution: """ @param S: A

[lintcode the-smallest-difference]最小差(python)

题目链接:http://www.lintcode.com/zh-cn/problem/the-smallest-difference/ 给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i] - B[j]|).返回最小差. 排好序后用两个指针分别扫描两个数组,每次更新他们的差值的绝对值.并且依据他们两个数字的大小来决定谁来移动指针. 1 class Solution: 2 # @param

2017盛大游戏杯 零件组装(状态压缩DP之巧妙枚举子集)

题目链接:2017盛大游戏杯 零件组装 题意: 有n个零件,给你相邻关系和排斥关系,每两块零件组装起来有一个代价,问最少的代价总和是多少. 题解: 考虑状态压缩,dp[i]表示i这个集合为一个零件块. 那么要枚举一下i的子集.O(3^n). 先要预处理一下每个集合的排斥个数和相邻个数,然后容斥一下就可以了. 1 #include<bits/stdc++.h> 2 #define mst(a,b) memset(a,b,sizeof(a)) 3 #define F(i,a,b) for(int