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;
 }
Example #4
0
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]);
     }
 }
Example #8
0
void permute(char * charset, int length)
{
  printf("permute %d\n", length);
  
  recursivePermute(charset, 0, length);
}