find all permutations code example

Example 1: how to get all permutations of an array

/* to be used something like this:
int [] toBePermuted = new int [] {1, 2, 3, 4};
ArrayList<int[]> a = heap(toBePermuted);
any mention of int [] can be replaced with any other Array of objects */

ArrayList<int []> heap(int [] input) {
  ArrayList<int []> ret = new ArrayList<int []> ();
  ret = generate(input.length, input, ret);
  return ret;
}

ArrayList<int []> generate(int k, int [] a, ArrayList<int []> output) {
  if (k == 1) {
    output.add(a.clone());
  } else {
    output = generate(k-1, a, output);
    for (int i=0; i<k-1; i++) {
      if (k%2 == 0) {
        int temp = a[i];
        a[i] = a[k-1];
        a[k-1] = temp;
      } else {
        int temp = a[0];
        a[0] = a[k-1];
        a[k-1] = temp;
      }
      generate(k-1, a, output);
    }
  }
  return output;
}

Example 2: find all permutations of a string

void permute(string a, int l, int r)  
{  
    // Base case  
    if (l == r)  
        cout<<a<<endl;  
    else
    {  
        // Permutations made  
        for (int i = l; i <= r; i++)  
        {  
  
            // Swapping done  
            swap(a[l], a[i]);  
  
            // Recursion called  
            permute(a, l+1, r);  
  
            //backtrack  
            swap(a[l], a[i]);  
        }  
    }  
}

Example 3: how to print all permutations of a string

void permutation(string s)
{
    sort(s.begin(),s.end());
	do{
		cout << s << " ";
	}
    while(next_permutation(s.begin(),s.end()); // std::next_permutation
    
    cout << endl;
}