Nothing fancy. Just skip the duplicated ones as num[i] == num[i-1]
1 class Solution { 2 public: 3 void getComb(vector<vector<int> > &result, vector<int> &num, vector<int> 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 if (i > index && num[i] == num[i-1]) continue; 10 current.push_back(num[i]); 11 getComb(result, num, current, i+1, len); 12 current.pop_back(); 13 } 14 } 15 vector<vector<int> > subsetsWithDup(vector<int> &S) { 16 vector<vector<int> > result; 17 sort(S.begin(), S.end()); 18 for (int i = 0; i <= S.size(); i++) { 19 getComb(result, S, vector<int>(), 0, i); 20 } 21 return result; 22 } 23 };