# Count all the permutation of an array

• Difficulty Level : Hard
• Last Updated : 08 Mar, 2022

Given an array of integer A[] with no duplicate elements, write a function that returns the count of all the permutations of an array having no subarray of [i, i+1] for every i in A[].
Examples:

Input  : 1 3 9
Output : 3
All the permutation of 1 3 9 are :
[1, 3, 9], [1, 9, 3], [3, 9, 1], [3, 1, 9], [9, 1, 3], [9, 3, 1]
Here [1, 3, 9], [9, 1, 3] are removed as they contain subarray
[1, 3] from original list and [3, 9, 1] removed as it contains
subarray [3, 9] from original list so,
Following are the 3 arrays that satisfy the condition :
[1, 9, 3], [3, 1, 9], [9, 3, 1]

Input  : 1 3 9 12
Output : 11

Naive Solution :Iterate through list of all permutations and remove those arrays which contains any subarray [i, i+1] from A[ ].
Code: Python code for finding out the permutation in the array

## Python3

 # Python implementation of the approachfrom itertools import permutations # Function that returns the count of all the permutation# having no subarray of [i,i+1] def count(arr):    z=[]    perm = permutations(arr)         for i in list(perm):        z.append(list(i))    q=[]         for i in range(len(arr)-1):        x,y=arr[i],arr[i+1]                 for j in range(len(z)):            if z[j].index(x)!=len(z[j])-1:                if z[j][z[j].index(x)+1]==y:                    q.append(z[j])                         for i in range(len(q)):         if q[i] in z:             z.remove(q[i])    return len(z)  # Driver CodeA = [1,3, 8, 9]print(count(A))

Output :

11

Efficient Solution : Following is a recursive solution based on fact that length of the array decides the number of all permutations having no subarray [i, i+1] for every i in A[ ]
Suppose the length of A[ ] is n, then

n        = n-1
count(0) = 1
count(1) = 1
count(n) = n * count(n-1) + (n-1) * count(n-2)

Code : Below is the code for implementing the recursive function that return count of permutations

## C++

 // C++ implementation of the approach// Recursive function that return count of// permutation based on the length of array.#include using namespace std; int count(int n){    if(n == 0)        return 1;    if(n == 1)        return 1;    else        return (n * count(n - 1)) +                        ((n - 1) * count(n - 2));} // Driver codeint main(){    int A[] = {1, 2, 3, 9};     int len = sizeof(A) / sizeof(A[0]);    cout << count(len - 1);} // This code is contributed by 29AjayKumar

## Java

 // Java implementation of the approach// Recursive function that return count of// permutation based on the length of array.import java.util.*; class GFG{ static int count(int n){    if(n == 0)        return 1;    if(n == 1)        return 1;    else        return (n * count(n - 1)) +                        ((n - 1) * count(n - 2));} // Driver Codestatic public void main(String[] arg){    int []A = {1, 2, 3, 9};     System.out.print(count(A.length - 1));}} // This code is contributed by PrinciRaj1992

## Python3

 # Python implementation of the approach# Recursive function that return count of# permutation based on the length of array. def count(n):    if n == 0:        return 1    if n == 1:        return 1    else:        return (n * count(n-1)) + ((n-1) * count(n-2))     # Driver CodeA = [1, 2, 3, 9]print(count(len(A)-1))

## C#

 // C# implementation of the approach// Recursive function that return count of// permutation based on the length of array.using System;     class GFG{ static int count(int n){    if(n == 0)        return 1;    if(n == 1)        return 1;    else        return (n * count(n - 1)) +         ((n - 1) * count(n - 2));} // Driver Codestatic public void Main(String[] arg){    int []A = {1, 2, 3, 9};     Console.Write(count(A.Length - 1));}} // This code is contributed by Princi Singh

## Javascript



Output :

11

My Personal Notes arrow_drop_up