Sunday, October 20, 2013

Subsets [Leetcode]

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],
  []
]

Solution: DFS. [other good solutions: using binary number, iteration]

class Solution {
public:
    void subsetsHelper(vector<vector<int> > &ret, vector<int> s, int cur, vector<int> r){
        if(cur==s.size()){
            ret.push_back(r);
            return;
        }
        //not add s[cur]
        subsetsHelper(ret, s, cur+1, r);
        //add s[cur]
        r.push_back(s[cur]);
        subsetsHelper(ret, s, cur+1, r);
    }
    vector<vector<int> > subsets(vector<int> &S) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > ret;
        if(S.empty())  return ret;
        sort(S.begin(), S.end());
        vector<int> r;
        subsetsHelper(ret, S, 0, r);
        return ret;
    }
};

No comments:

Post a Comment