Classical combination problem.
1 class Solution { 2 public: 3 void getComb(vector> &result, vector &num, vector current, int index, int len) { 4 if (current.size() == len) { 5 result.push_back(current); 6 return; 7 } 8 for (int i = index; i < num.size(); i++) { 9 current.push_back(num[i]);10 getComb(result, num, current, i+1, len);11 current.pop_back();12 }13 }14 vector > subsets(vector &S) {15 vector > result;16 sort(S.begin(), S.end());17 for (int i = 0; i <= S.size(); i++) {18 getComb(result, S, vector (), 0, i);19 }20 return result;21 }22 };