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 }
  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10717650.html
Copyright © 2011-2022 走看看