Given a number N, our task is to generate all the possible cyclic permutations of the number.
A cyclic permutation shifts all the elements of a set by a fixed offset. For a set with elements
Examples:
Input : 123 Output : 123 312 231 Input : 5674 Output : 5674 4567 7456 6745
The idea is to generate next permutation of a number using below formula.
rem = num % 10; div = num / 10; num = (pow(10, n - 1)) * rem + div;
While repeating above steps, if we come back to original number, we stop and return.
// Program to generate all cyclic permutations // of number #include <bits/stdc++.h> using namespace std;
// Function to count the total number of digits // in a number. int countdigits( int N)
{ int count = 0;
while (N) {
count++;
N = N / 10;
}
return count;
} // Function to generate all cyclic permutations // of a number void cyclic( int N)
{ int num = N;
int n = countdigits(N);
while (1) {
cout << num << endl;
// Following three lines generates a
// circular permutation of a number.
int rem = num % 10;
int div = num / 10;
num = ( pow (10, n - 1)) * rem + div ;
// If all the permutations are checked
// and we obtain original number exit
// from loop.
if (num == N)
break ;
}
} // Driver Program int main()
{ int N = 5674;
cyclic(N);
return 0;
} |
// Java Program to generate all // cyclic permutations of number public class GFG
{ // Function to count the total number
// of digits in a number.
static int countdigits( int N)
{
int count = 0 ;
while (N> 0 ) {
count++;
N = N / 10 ;
}
return count;
}
// Function to generate all cyclic
// permutations of a number
static void cyclic( int N)
{
int num = N;
int n = countdigits(N);
while ( true ) {
System.out.println(num);
// Following three lines generates a
// circular permutation of a number.
int rem = num % 10 ;
int dev = num / 10 ;
num = ( int )((Math.pow( 10 , n - 1 )) *
rem + dev);
// If all the permutations are
// checked and we obtain original
// number exit from loop.
if (num == N)
break ;
}
}
// Driver Program
public static void main (String[] args) {
int N = 5674 ;
cyclic(N);
}
} /* This code is contributed by Mr. Somesh Awasthi */ |
# Python3 Program to # generate all cyclic # permutations of number import math
# Function to count the # total number of digits # in a number. def countdigits(N):
count = 0 ;
while (N):
count = count + 1 ;
N = int (math.floor(N / 10 ));
return count;
# Function to generate # all cyclic permutations # of a number def cyclic(N):
num = N;
n = countdigits(N);
while ( 1 ):
print ( int (num));
# Following three lines
# generates a circular
# permutation of a number.
rem = num % 10 ;
div = math.floor(num / 10 );
num = ((math. pow ( 10 , n - 1 )) *
rem + div);
# If all the permutations
# are checked and we obtain
# original number exit from loop.
if (num = = N):
break ;
# Driver Code N = 5674 ;
cyclic(N); # This code is contributed by mits |
// C# Program to generate all // cyclic permutations of number using System;
class GFG
{ // Function to count the total number
// of digits in a number.
static int countdigits( int N)
{
int count = 0;
while (N > 0) {
count++;
N = N / 10;
}
return count;
}
// Function to generate all cyclic
// permutations of a number
static void cyclic( int N)
{
int num = N;
int n = countdigits(N);
while ( true ) {
Console.WriteLine(num);
// Following three lines generates a
// circular permutation of a number.
int rem = num % 10;
int dev = num / 10;
num = ( int )((Math.Pow(10, n - 1)) *
rem + dev);
// If all the permutations are
// checked and we obtain original
// number exit from loop.
if (num == N)
break ;
}
}
// Driver Program
public static void Main ()
{
int N = 5674;
cyclic(N);
}
} // This code is contributed by nitin mittal |
<?php // PHP Program to generate all // cyclic permutations of number // Function to count the total // number of digits in a number. function countdigits( $N )
{ $count = 0;
while ( $N )
{
$count ++;
$N = floor ( $N / 10);
}
return $count ;
} // Function to generate all // cyclic permutations of a number function cyclic( $N )
{ $num = $N ;
$n = countdigits( $N );
while (1)
{
echo ( $num );
echo "\n" ;
// Following three lines generates a
// circular permutation of a number.
$rem = $num % 10;
$div = floor ( $num / 10);
$num = (pow(10, $n - 1)) * $rem + $div ;
// If all the permutations are checked
// and we obtain original number exit
// from loop.
if ( $num == $N )
break ;
}
} // Driver Code
$N = 5674;
cyclic( $N );
// This code is contributed by nitin mittal ?> |
<script> // javascript Program to generate all // cyclic permutations of number // Function to count the total number // of digits in a number. function countdigits(N)
{ var count = 0;
while (N>0) {
count++;
N = parseInt(N / 10);
}
return count;
} // Function to generate all cyclic // permutations of a number function cyclic(N)
{ var num = N;
var n = countdigits(N);
while ( true ) {
document.write(num+ "<br>" );
// Following three lines generates a
// circular permutation of a number.
var rem = num % 10;
var dev = parseInt(num / 10);
num = parseInt(((Math.pow(10, n - 1)) *
rem + dev));
// If all the permutations are
// checked and we obtain original
// number exit from loop.
if (num == N)
break ;
}
} // Driver Program var N = 5674;
cyclic(N); // This code is contributed by Amit Katiyar </script> |
Output
5674 4567 7456 6745
Time Complexity: O(N), where N is the number of digits
Auxiliary Space: O(1)