void recursivePermute(vector<int> &num, vector<int> aPermute, int pos, bool used[]){ if (pos == num.size()){ result.push_back(aPermute); return; } for (int i=0;i<num.size();i++){ if (used[i] == false){ used[i] = true; aPermute.push_back(num[i]); recursivePermute(num,aPermute,pos+1,used); aPermute.pop_back(); used[i] = false; while (i+1 < num.size() && num[i+1] == num[i]) i++; } } }
vector<vector<int> > permuteUnique(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function ans.clear(); recursivePermute(num, 0); return ans; }
vector<vector<int> > permute(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> curr; ans.clear(); recursivePermute(curr, 0, num); return ans; }
void recursivePermute(char * charset, int ind, int length) { int iter; if(ind == length) { printPermute(charset, length); } for(iter = ind; iter < length; iter++) { swap(& charset[iter], & charset[ind]); recursivePermute(charset, ind + 1, length); swap(& charset[iter], & charset[ind]); } }
void recursivePermute(vector<int> & curr, int pos, vector<int> &num) { if (curr.size() == num.size() || pos >= num.size()) { ans.push_back(curr); return; } for (int i = pos; i < num.size(); i ++) { swap(num[pos], num[i]); curr.push_back(num[pos]); recursivePermute(curr, pos + 1, num); curr.pop_back(); swap(num[pos], num[i]); } }
vector<vector<int> > permuteUnique(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function result.clear(); vector<int> aPermute; int pos = 0; bool used[num.size()]; for (int i=0;i<num.size();i++) used[i] = false; sort(num.begin(),num.end()); recursivePermute(num,aPermute,pos,used); return result; }
void recursivePermute(vector<int> & num, int pos) { if (pos >= num.size()) { ans.push_back(num); return; } map<int, bool> visited; // Flag the number if is visited in current pos for (int i = pos; i < num.size(); i ++) { if (visited.count(num[i]) > 0) continue; visited[num[i]] = true; swap(num[pos], num[i]); recursivePermute(num, pos + 1); swap(num[pos], num[i]); } }
void permute(char * charset, int length) { printf("permute %d\n", length); recursivePermute(charset, 0, length); }