`
cozilla
  • 浏览: 93896 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[Leetcode] Subsets 1 ^& 2

 
阅读更多
SubsetsApr 18 '126226 / 16269

Given a set of distinct integers, S, 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 S = [1,2,3], a solution is:

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

 

class Solution {
public:
    vector<vector<int> > subsets(vector<int> &S) {
        sort(S.begin(), S.end());
        vector<vector<int> > res;
        int n = S.size();
        for (int i = 0; i <= n; i++) {
            vector<int> a;
        	gen(res, S, i, 0, a);
        }
        return res;
    }

    void gen(vector<vector<int> >& res, const vector<int>& s, int n, int cur, vector<int> &a) {
    	if (a.size() == n) {
    		res.push_back(a);
    		return;
    	}
        if (cur == s.size()) return;

    	gen(res, s, n, cur+1, a);
    	
    	a.push_back(s[cur]);
    	gen(res, s, n, cur+1, a);
    	a.pop_back();
    }
};

 

class Solution {
public:
    vector<vector<int> > subsets(vector<int> &S) {
        sort(S.begin(), S.end());
        vector<vector<int> > res;
        vector<int> a;
        gen(res, S, 0, a);
        return res;
    }

    void gen(vector<vector<int> >& res, const vector<int>& s,  int cur, vector<int> &a) {
    	if (cur == s.size()) {
        	res.push_back(a);
    		return;
    	}
    	gen(res, s, cur+1, a);
    	
    	a.push_back(s[cur]);
    	gen(res, s, cur+1, a);
    	a.pop_back();
    }
};

 

Subsets IIJun 25 '124769 / 13419

Given a collection of integers that might contain duplicates, S, 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 S = [1,2,2], a solution is:

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

 

class Solution {
public:
    void gen(vector<vector<int> >& res, const vector<int>& s,  int cur, vector<int> &a) {
        if (cur == s.size()) {
        	res.push_back(a);
    		return;
    	}
        int end = cur;
        while (end < s.size() && s[end] == s[cur]) end++;
    	gen(res, s, end, a);
    	
    	for (int i = cur; i < end; i++) {
    	   a.push_back(s[cur]);
           gen(res, s, end, a);
        }
        while (end-- != cur) a.pop_back();
    }

    vector<vector<int> > subsetsWithDup(vector<int> &S) {
        sort(S.begin(), S.end());
        vector<vector<int> > res;
        vector<int> a;
        gen(res, S, 0, a);
        return res;
    }
};

 

分享到:
评论

相关推荐

    python-leetcode题解之078-Subsets

    python python_leetcode题解之078_Subsets

    js-leetcode题解之78-subsets.js

    例如,对于输入数组 [1, 2, 3],期望的输出是 [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]。每一个子集都是通过在前一个子集的基础上添加或不添加元素来生成的。递归终止条件是当我们已经处理完数组中...

    python-leetcode题解之090-Subsets-II

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

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

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

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

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

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

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

    leetcode-常见考题2.pdf

    根据提供的文件信息,这份名为“leetcode-常见考题2.pdf”的文档主要包含了针对大厂面试中常见的算法面试题目的整理。这份资料涉及到了LeetCode网站上许多经典和高频出现的算法题目,这些题目覆盖了不同难度级别和...

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

    2. LeetCode平台: LeetCode是一个编程学习网站,它提供了大量的编程题目供用户练习,以提升编程能力和准备技术面试。这些题目覆盖从初级到高级不同难度级别,很多技术面试官会要求应聘者在面试过程中解答LeetCode上...

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

    - **Climbing Stairs**:模拟爬楼梯,每次可以爬1阶或2阶。 5. **回溯(Backtracking)**: - **Combination**:求解组合问题。 - **Subsets**:找出所有可能的子集。 - **Permutation**:生成全排列。 6. **...

    _leetcode-python.pdf

    - Edit Distance: 给定两个单词word1和word2,计算将word1转换为word2所使用的最少操作数。 - Set Matrix Zeroes: 给定一个m×n的矩阵,如果一个元素为0,则将其所在行和列的所有元素都变为0。 - Search a 2D Matrix...

    Leetcode部分解答(126题)

    1. **Palindrome Partitioning (mine).cpp** - 这个文件是关于LeetCode的第131题“回文分割”。该问题要求将一个字符串分割成多个回文子串。解冑通常涉及深度优先搜索或动态规划,寻找所有可能的分割方案并检查是否...

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

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

    LeetCode leetcode部分题解答代码实现

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

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

    这个解决方案的时间复杂度是O(2^n),其中n是数组`nums`的大小,因为每个元素都有被选中或不选中的两种情况。空间复杂度是O(n),因为我们在递归调用过程中需要保存一个子集的副本。 总的来说,理解和解决LeetCode第...

    python-leetcode面试题解之第78题子集-题解.zip

    3. **时间复杂度**:此方法的时间复杂度为O(2^n),因为每个元素都有两种选择(加入或不加入子集),总共有n个元素。空间复杂度为O(n),因为需要存储所有的子集。 4. **优化策略**:在实际应用中,可能需要考虑如何...

    javascript-leetcode面试题解递归与回溯问题之第78题子集-题解.zip

    console.log(subsets([1, 2, 3])); // 输出: [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]] ``` 在这个例子中,`backtrack`函数负责回溯过程,每次递归调用都会尝试两种可能性:添加或不添加当前元素。...

    leetcode写题闪退-LeetCode:leetcodeOJ

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

    javascript-leetcode面试题解递归与回溯问题之第90题子集II-题解.zip

    本篇内容主要聚焦于JavaScript解决LeetCode中的第90题——"子集II"(Subsets II)的递归与回溯算法。 子集II问题要求我们找到一个给定整数数组的所有不重复子序列,且这些子序列中包含至少两个连续的数字。这个题目...

    uber leetcode

    - **题目描述:**给定两个字符串word1和word2,返回使word1和word2相同所需的最小步数。每步可以插入一个字符、删除一个字符或者替换一个字符。 - **应用场景:**自然语言处理中的拼写纠错、相似度比较等场景。 ...

Global site tag (gtag.js) - Google Analytics