class Solution { public: vector<vector<int> > result; vector<vector<int> > permuteUnique(vector<int> &num) { if (num.size() == 0) return result; sort(num.begin(), num.end()); vector<bool> state(num.size(), false); vector<int> tmp; back_tracking(num, tmp, state); return result; } void back_tracking(vector<int>& num, vector<int>& tmp, vector<bool>& state) { if (tmp.size() == num.size()) { result.push_back(tmp); return; } for (int i = 0; i < num.size(); ++i) { if (state[i] || (i > 0 && num[i] == num[i-1] && state[i-1])) { continue; } state[i] = true; tmp.push_back(num[i]); back_tracking(num, tmp, state); state[i] = false; tmp.pop_back(); } return; } };