`
frank-liu
  • 浏览: 1691903 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

leetcode: Subsets

 
阅读更多

问题描述:

Given a set of distinct integers, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

 

[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

原问题链接:https://leetcode.com/problems/subsets/

 

问题分析

  关于集合生成的问题在之前的文章里有过详细的讨论。相对来说它的解法也有若干种,其中最简洁的一种要数二进制法了。这种思路就是基于给定的数组来说,假设它的长度为n。那么它里面所有元素的所有可能被选择的情况是2 ** n。那么我们可以定义一个值为2 ** n的数字,从0开始一直到这个数字,每个数字对应它里面元素的一种选择情况。这样这个数字对应的二进制位里面为0的表示未选取的,为1的表示选取的。每取一个数字这么选取一次元素。最终可以得到所有选取的情况。

  在详细的实现里,问题的细节点在于判断一个数字里面的为1的位,我们采取1 << j来表示数字1左移j位。通过它和给定的数字逐位的与运算来计算结果。如果这个结果不为0,则对应数组里nums[j]的元素被选取。

  详细的代码实现如下:

 

public class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> result = new LinkedList<>();
        for(int i = 0; i < 1 << nums.length; i++) {
            List<Integer> list = new LinkedList<>();
            for(int j = 0; j < nums.length; j++) {
                if((i & (1 << j)) != 0) list.add(nums[j]);
            }
            result.add(list);
        }
        return result;
    }
}

 

1
0
分享到:
评论

相关推荐

    leetcode写题闪退-LeetCode:leetcodeOJ

    leetcode写题闪退 #*的多少代表此题的有意思程度 有几题第一次写的时候思绪比较混乱: *****Regular Expression Matching 2014.10.29 对于Find Minimum in Rotated Sorted Array II 和 Find Minimum in Rotated ...

    leetcode1004-leetcode:我的力扣解决方案

    leetcode 1004 leetcode 题目分类 数组 哈希表 链表 堆 栈 队列 字符串 树 Trie BST 图 最小(大)堆 Two Points 滑动窗口 递归 回溯 动态规划 排序 拓扑排序 二分查找 数学 深度优先搜索 ...Subsets

    python-leetcode题解之078-Subsets

    python python_leetcode题解之078_Subsets

    python-leetcode题解之090-Subsets-II

    本文的重点是解决 LeetCode 上的一道题——Subsets-II(编号090)。该题要求编写一个函数,找出给定数组的所有可能的子集,并返回这些子集。这个问题是组合数学中的一个经典问题,在面试中也经常出现。解决这类问题...

    C语言-leetcode题解之78-subsets.c

    针对LeetCode题解之78-subsets.c,这篇代码展示了一个典型的C语言实现。首先,我们需要明白,解决这类问题的常用方法是递归或者位运算。递归方法通常更加直观,思路是先固定一个元素,然后递归地求出剩余元素的所有...

    c语言-leetcode题解之0090-subsets-ii.zip

    本压缩包文件“c语言-leetcode题解之0090-subsets-ii.zip”即为一套使用 C 语言编写的题解,针对 LeetCode 上的一道特定题目:“Subsets II”(编号为0090)。这个题目的核心是解决子集问题,且需要处理含有重复元素...

    js-leetcode题解之78-subsets.js

    在此背景下,"js-leetcode题解之78-subsets.js" 就是这样一个用于分享 subsets 题目 JavaScript 解法的资源。通过研究这类资源,开发者可以学习到如何使用回溯法等算法思想来解决实际问题,从而提升自身的编程实践...

    c语言-leetcode题解之0078-subsets.zip

    本压缩包“c语言-leetcode题解之0078-subsets.zip”包含了使用C语言解决该问题的详细代码示例,旨在帮助C语言程序员深入理解子集问题,并提供一种可能的解决方式。代码中不仅有完整的函数实现,还包含了相应的解释...

    java-leetcode题解之Partition to K Equal Sum Subsets.java

    Java-leetCode题解之Partition to K Equal Sum Subsets.java是一篇深入探讨如何用Java语言解决特定编程题目的文章。文章主要围绕一道经典的计算机算法与编程问题展开,即如何将一个给定的整数数组划分成K个和相同的...

    Leetcode题目+解析+思路+答案.pdf

    - **Subsets**:找出所有可能的子集。 - **Permutation**:生成全排列。 6. **贪心(Greedy)**: - **Jump Game**:跳跃游戏,判断是否能到达数组末尾。 - **Gas Station**:寻找最短的加油路线。 - **Candy*...

    數位之和leetcode-leetcode-cpp:我的LeetCodeC++答案

    subsets: 78 - permutation - combination sum: 39, 40, 216 - palindrome partitioning - regex - sudoku solver: 37 排序 - merge sort - quick sort - insertion sort - selection sort - counting sort 位操作 -...

    js-leetcode题解之90-subsets-II.js

    在JavaScript中解决LeetCode问题库中的第90题——子集II,是一个典型的回溯算法问题。该问题要求给定一个可能包含重复元素的整数数组,返回该数组所有可能的子集。解决这个问题的关键在于,如何避免在子集的生成过程...

    _leetcode-python.pdf

    - Subsets: 给定一组可能包含重复元素的整数数组,返回该数组所有可能的子集。 - Word Search: 给定一个m×n的二维字符网格board和一个单词(字符串)word,如果word存在于网格中,则返回true;否则,返回false。 - ...

    LeetCode leetcode部分题解答代码实现

    * Subsets:给定一个数组,返回所有可能的子集。这个题目需要使用回溯算法的思想,将数组分解成更小的子数组,并找到所有可能的子集。 6. 贪心算法 贪心算法是一种非常重要的算法思想,LeetCode 中有很多关于贪心...

    leetcode安卓-The_LeetCode_Awakens:做或不做。没有尝试

    leetcode安卓The_LeetCode_Awakens Notice Naming Rule 资料夹 请把题号(三码) 放在题目前面,并用"_" 隔开,题目中间有空格,请用“-” 隔开 (ex: 078_Subsets) 题号请参考 如果没有题号,就先省略 档案 Owner 整理...

    Leetcode部分解答(126题)

    10. **Subsets II .cpp** - 第90题“子集II”,要求找到一个集合的所有不重复子集,解冑通常使用递归或回溯法。 以上代码覆盖了算法设计中的多种重要思想,包括回溯法、动态规划、字符串处理、区间操作和深度/广度...

    leetcode-常见考题2.pdf

    - 在 Subsets 题目中,回溯算法用于找出集合的所有可能子集。 14. **递归与迭代**: - 递归是一种常见的编程技巧,它将问题分解为更小的问题,而迭代通常是递归的替代方案,使用循环结构代替递归结构。 - 在 ...

    leetcode316-algorithm-code-csharp:C#算法题汇总

    3. LeetCode第78题:"Subsets"(子集):给定一个没有重复元素的整数数组,找出所有可能的子集(即功率集)。 4. LeetCode第316题:"Remove Duplicate Letters"(移除重复的字母):给定一个字符串,从中移除重复的...

    c++-c++编程基础之leetcode题解第78题子集.zip

    第78题"子集"(Subsets)是LeetCode中的一个经典问题,它涉及到深度优先搜索(DFS)或回溯算法的应用。在此,我们将深入探讨这个问题的解决方案以及相关的C++编程知识。 ### 问题描述: 给定一个没有重复元素的整数...

Global site tag (gtag.js) - Google Analytics