zoukankan      html  css  js  c++  java
  • leetcode 78. 子集

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

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

    示例:

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

     1 class Solution {
     2 public:
     3     vector<vector<int>> subsets(vector<int>& nums) {
     4         vector<vector<int>> ans(1);
     5         for(int i = 0; i < nums.size(); i++){
     6             int len = ans.size();//一定要在循环外面确定ans的大小,在循环中ans的大小是变化的
     7             for(int j=0; j < len; j++){
     8                 ans.push_back(ans[j]);//复制之前ans中的所有元素
     9                 ans.back().push_back(nums[i]); //在复制的项后面添加nums[i]
    10             }
    11         }
    12         return ans;
    13     }
    14 };

    每一个元素有两种状态,在子集中,和不在子集中

    上面的算法就是遵循这样的思维,首先申明一个大小为1的ans,然后复制这个空的vector,把nums[i]添加到这个vector中,这样就实现了nums[i]的两种状态,此时ans=[[],[1]];重复这样的过程就能求到nums的所有子集

    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    LeetCode 101. 对称二叉树
    PTA 两个有序序列的中位数(25分)
    CF1567
    亚线性筛
    LowbitMatrix(线段树)
    Matrix(组合数学)
    [模版] 数论基础模版
    Gym102001
    Gym102483A
    [模版] Miller-Rabin素性测试&Pollard-Rho分解质因数
  • 原文地址:https://www.cnblogs.com/mr-stn/p/8997624.html
Copyright © 2011-2022 走看看