zoukankan      html  css  js  c++  java
  • 力扣算法题—078集合

    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

    说明:解集不能包含重复的子集。

    示例:

    输入: nums = [1,2,3]
    输出:
    [
      [3],
      [1],
      [2],
      [1,2,3],
      [1,3],
      [2,3],
      [1,2],
      []
    ]

     1 #include "_000库函数.h"
     2 
     3 
     4 //这道题就是求不同的子集问题
     5 class solution {
     6 public:
     7     vector<vector<int>> subsets(vector<int>& nums) {
     8         if (nums.empty())return { {} };
     9         vector<vector<int>>res;
    10         res.push_back({});        
    11         for (int i = 1; i <= nums.size(); ++i) {
    12             vector<int>v;
    13             helper(nums, i, 0, v, res);//求不同个数的子集
    14         }
    15         return res;
    16     }
    17 
    18     void helper(vector<int>& nums, int k, int level, vector<int>&v, vector<vector<int>>&res) {
    19         if (v.size() == k) {
    20             res.push_back(v);
    21             return;
    22         }
    23         for (int i = level; i < nums.size(); ++i) {
    24             v.push_back(nums[i]);
    25             helper(nums, k, i + 1, v, res);
    26             v.pop_back();
    27         }
    28     }
    29     
    30 };
    31 
    32 //使用叠加方法
    33 //每次在原数组的基础上加入后面的数字
    34 //比如对于题目中给的例子[1, 2, 3]来说,最开始是空集,
    35 //那么我们现在要处理1,就在空集上加1,为[1],现在我们有两个自己[]和[1],
    36 //下面我们来处理2,我们在之前的子集基础上,每个都加个2,可以分别得到[2],[1, 2],
    37 //那么现在所有的子集合为[], [1], [2], [1, 2],同理处理3的情况可得[3], [1, 3], [2, 3], [1, 2, 3],
    38 //再加上之前的子集就是所有的子集合了,代码如下:
    39 class Solution {
    40 public:
    41     vector<vector<int>> subsets(vector<int>& nums) {
    42         if (nums.empty())return { {} };
    43         vector<vector<int>>res;
    44         res.push_back({});
    45         for (int i = 0; i < nums.size(); ++i) {
    46             int n = res.size();
    47             for (int j = 0; j < n; ++j) {
    48                 vector<int>v = res[j];
    49                 v.push_back(nums[i]);//添加新的数据
    50                 res.push_back(v);
    51             }
    52         }
    53         return res;
    54     }
    55 };
    56 
    57 
    58 void T078() {
    59     Solution s;
    60     vector<int>n = { 1,2,3 };
    61     vector<vector<int>>v;
    62     v = s.subsets(n);
    63     for (auto a : v) {
    64         for (auto b : a)
    65             cout << b << "  ";
    66         cout << endl;
    67     }
    68 }
  • 相关阅读:
    set集合 深浅拷贝
    2015 ACM/ICPC Asia Regional Changchun Online Pro 1005 Travel (Krsukal变形)
    2015 ACM/ICPC Asia Regional Changchun Online Pro 1002 Ponds(拓扑排序+并查集)
    Codeforces Round #319 (Div. 2) B Modulo Sum (dp,鸽巢)
    Codeforces Round #319 (Div. 2) C Vasya and Petya's Game (数论)
    UVA 11468 Substring (AC自动机)
    UVA11019 Matrix Matcher (AC自动机)
    UVALive 4670 Dominating Patterns (AC自动机)
    UVALive 3026 Period (KMP算法简介)
    UVA 11732 strcmp() Anyone (Trie+链表)
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10717650.html
Copyright © 2011-2022 走看看