zoukankan      html  css  js  c++  java
  • Leetcode::Subsets

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

    分析:题目就是给一个整数集合,给出所以的子集。 基本思想是递归或者说是迭代的方法。用前面得到的集合来构造

    后面的。但是怎样高效、方便的构造集合是关键点。比如,开始想到的是先生成集合中0个元素、1个元素。。。逐步增多

    但这样很难实现。实际高效的做法是用i个元素生成所有子集,然后往里面添加第(i+1)个元素,将得到的元素集合加到前面结果

    中,就可以得到最终的结果了。

     1 class Solution {
     2 public:
     3     vector<vector<int> > subsets(vector<int> &S) {
     4         vector<vector<int> > sets;
     5         vector<int> subs;
     6         sort(S.begin(),S.end());
     7         sets.push_back(subs);
     8         for(int i=0;i<S.size();i++)
     9         {
    10             int c_size = sets.size();
    11             for(int j=0;j<c_size;j++)
    12             {
    13                 subs = sets[j];
    14                 subs.push_back(S[i]);
    15                 sets.push_back(subs);
    16             }
    17         }
    18         
    19         return sets;
    20     }
    21 };

    代码非常的简洁,但是注意第10行,是每次加之前,需要记录集合中已有的子集个数,否则后面size变化,会导致死循环!

    
    
  • 相关阅读:
    UVa 10474
    UVa 1339
    UVa 1368
    UVa 1585
    UVa 1586
    ACM中Java高效输入输出封装
    Ajax中Get请求与Post请求的区别
    AJAX——核心XMLHttpRequest对象
    PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
    PHP类方法重写原则
  • 原文地址:https://www.cnblogs.com/soyscut/p/3770754.html
Copyright © 2011-2022 走看看