Subsets

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:
    void visit(vector<vector<int> > &result, vector<int> &S, bool *flags, int n, int pos, int count)
    {
        if (pos >= n || count == 0)
        {
            if (count == 0)
            {
                vector<int> temp;
                for (int i = 0; i < n; i++)
                {
                    if (flags[i])
                    {
                        temp.push_back(S[i]);
                    }
                }
                result.push_back(temp);
            }
            return;
        }

        flags[pos] = true;
        visit(result, S, flags, n, pos+1, count-1);
        flags[pos] = false;
        visit(result, S, flags, n, pos+1, count);
    }

    vector<vector<int> > subsets(vector<int> &S) {
        int size = S.size();
        sort(S.begin(), S.end());
        bool *flags = new bool[size];
        for (int i = 0; i < size; i++)
        {
            flags[i] = false;
        }

        vector<vector<int> > result;
        for (int i = 0; i <= size; i++)
        {
            visit(result, S, flags, size, 0, i);
        }
        delete []flags;

        return result;
    }
};

 

你可能感兴趣的:(Subsets)