Smallest number by rearranging digits of a given number

25 Jan, 2022
Find the Smallest number (Not leading Zeros) which can be obtained by rearranging the digits of a given number. 
Examples: 
Input: n = 846903
Output: 304689

Input: n = 55010
Output: 10055

Input: n = -40505
Output: -55400
Steps to find the smallest number.  
Count the frequency of each digit in the number.If it is a non-negative number thenPlace the smallest digit (except 0) at the left most of the required number. and decrement the frequency of that digit by 1.Place all remaining digits in ascending order from left to right.Else if it is a negative number thenPlace the largest digit at the left most of the required number. and decrement the frequency of that digit by 1.Place all remaining digits in descending order from right to left.
Count the frequency of each digit in the number.
If it is a non-negative number thenPlace the smallest digit (except 0) at the left most of the required number. and decrement the frequency of that digit by 1.Place all remaining digits in ascending order from left to right.
Place the smallest digit (except 0) at the left most of the required number. and decrement the frequency of that digit by 1.Place all remaining digits in ascending order from left to right.
Place the smallest digit (except 0) at the left most of the required number. and decrement the frequency of that digit by 1.
Place all remaining digits in ascending order from left to right.
Else if it is a negative number thenPlace the largest digit at the left most of the required number. and decrement the frequency of that digit by 1.Place all remaining digits in descending order from right to left.
Place the largest digit at the left most of the required number. and decrement the frequency of that digit by 1.Place all remaining digits in descending order from right to left.
Place the largest digit at the left most of the required number. and decrement the frequency of that digit by 1.
Place all remaining digits in descending order from right to left.
This solution is based on counting sort. 
C++
Java
Python3
C#
PHP
Javascript
// C++ program for finding smallest number// from digits of given number#include<iostream>using namespace std; // function to find the smallest numberint smallest(int num){    // initialize frequency of each digit to Zero    int freq[10] = {0};           // Checking Number is positive or Negative    bool is_pos = (num>0);         // Getting the absolute value of num    num = abs(num);       // count frequency of each digit in the number    while (num)    {        int d = num % 10; // extract last digit        freq[d]++; // increment counting        num = num / 10; //remove last digit    }         int result = 0;         // If it is positive Number then it should be smallest      if(is_pos)    {      // Set the Leftmost digit to minimum except 0      for (int i = 1 ; i <= 9 ; i++)      {          if (freq[i])          {              result = i;              freq[i]--;              break;          }      }       // arrange all remaining digits      // in ascending order      for (int i = 0 ; i <= 9 ; i++)          while (freq[i]--)              result = result * 10 + i;    }    else  // If negative then number should be Largest    {      // Set the Leftmost digit to maximum      for (int i = 9 ; i >= 1 ; i--)      {         if (freq[i])         {            result = i;            freq[i]--;            break;         }      }             // arrange all remaining digits      // in descending order      for (int i = 9 ; i >=0 ; i--)         while (freq[i]--)            result = result * 10 + i;       // Negative number should be returned here      result = -result;    }    return result;} // Driver Programint main(){    int num = 570107;    cout << smallest(num) << endl;       int num2 = -691005;    cout << smallest(num2);    return 0;}
import java.lang.Math; // Java program for finding smallest number// from digits of given numberpublic class GFG {     // function to find the smallest number    static int smallest(int num)    {        // initialize frequency of each digit to Zero        int[] freq = new int[10];                 // Checking Number is positive or Negative        boolean is_pos = (num>0);                 // Getting the absolute value of num        num = Math.abs(num);               // count frequency of each digit in the number        while (num > 0)        {            int d = num % 10; // extract last digit            freq[d]++; // increment counting            num = num / 10; //remove last digit        }             int result = 0;             // If it is positive Number then it should be smallest          if(is_pos)        {            // Set the LEFTMOST digit to minimum expect 0            for (int i = 1 ; i <= 9 ; i++)            {                    if (freq[i] != 0)                {                        result = i;                        freq[i]--;                    break;                }            }                  // arrange all remaining digits            // in ascending order            for (int i = 0 ; i <= 9 ; i++)                while (freq[i]-- != 0)                    result = result * 10 + i;         }          else  // If negative then number should be Largest        {          // Set the Rightmost digit to maximum          for (int i = 9 ; i >= 1 ; i--)          {             if (freq[i] !=0)             {                result = i;                freq[i]--;                break;             }          }           // arrange all remaining digits          // in descending order          for (int i = 9 ; i >=0 ; i--)             while (freq[i]-- != 0)                result = result * 10 + i;           // Negative number should be returned here          result = -result;        }        return result;    }          // Driver Program    public static void main(String args[])    {        int num = 570107;        System.out.println(smallest(num));                 int num2 = -691005;        System.out.println(smallest(num2));    }}// This code is contributed by Sumit Ghosh
# Function to find the smallest numberdef smallest(lst):         # Here i is index and n is the number of the list    for i,n in enumerate(lst):                 # Checking for the first non-zero digit in the sorted list        if n != '0':                         # Remove and store the digit from the lst            tmp = lst.pop(i)            break         # Place the first non-zero digit at the starting    # and return the final number    return str(tmp) + ''.join(lst)  # Driver programif __name__ == '__main__':         # Converting the given numbers into string to form a list    lst = list(str(570107))    lst.sort()         # Calling the function using the above list    print (smallest(lst))     # This code is contributed by Mahendra Yadav
// C# program for finding smallest// number from digits of given// numberusing System; public class GFG {     // function to find the smallest    // number    static int smallest(int num)    {                 // initialize frequency of        // each digit to Zero        int[] freq = new int[10];             // count frequency of each        // digit in the number        while (num > 0)        {                         // extract last digit            int d = num % 10;                         // increment counting            freq[d]++;                         //remove last digit            num = num / 10;        }             // Set the LEFTMOST digit to        // minimum expect 0        int result = 0;        for (int i = 1 ; i <= 9 ; i++)        {            if (freq[i] != 0)            {                result = i;                freq[i]--;                break;            }        }             // arrange all remaining digits        // in ascending order        for (int i = 0 ; i <= 9 ; i++)            while (freq[i]-- != 0)                result = result * 10 + i;             return result;    }         // Driver Program    public static void Main()    {        int num = 570107;        Console.WriteLine(smallest(num));    }} // This code is contributed by anuj_67.
<?php// PHP program for finding smallest// number from digits of given number // function to find the smallest numberfunction smallest($num){    // initialize frequency of    // each digit to Zero    $freq = array_fill(0, 10, 0);     // count frequency of each    // digit in the number    while ($num)    {        $d = $num % 10; // extract last digit        $freq[$d]++; // increment counting        $num = (int)($num / 10); // remove last digit    }     // Set the LEFTMOST digit    // to minimum expect 0    $result = 0;    for ($i = 1 ; $i <= 9 ; $i++)    {        if ($freq[$i])        {            $result = $i;            $freq[$i]--;            break;        }    }     // arrange all remaining digits    // in ascending order    for ($i = 0 ; $i <= 9 ; $i++)        while ($freq[$i] > 0)        {            $result = $result * 10 + $i;            $freq[$i] -= 1;        }     return $result;} // Driver Code$num = 570107;echo smallest($num); // This code is contributed by mits?>
<script> // Javascript program for finding smallest number// from digits of given number // function to find the smallest numberfunction smallest(num){    // initialize frequency of each digit to Zero    var freq = Array(10).fill(0);     // count frequency of each digit in the number    while (num)    {        var d = num % 10; // extract last digit        freq[d]++; // increment counting        num = parseInt(num / 10); //remove last digit    }     // Set the LEFTMOST digit to minimum expect 0    var result = 0;    for (var i = 1 ; i <= 9 ; i++)    {        if (freq[i])        {            result = i;            freq[i]--;            break;        }    }     // arrange all remaining digits    // in ascending order    for (var i = 0 ; i <= 9 ; i++)        while (freq[i]--)            result = result * 10 + i;     return result;} // Driver Programvar num = 570107;document.write(smallest(num)); // This code is contributed by rutvik_56.</script>
100577
-965100
Another Approach:Find smallest permutation of given numberThis article is contributed by Ajay Kumar Agrahari(aJy aGr). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
vt_m
Mithun Kumar
rutvik_56
dangebvishal
purushottamkumar4
amartyaghoshgfg
GE
number-digits
Mathematical
GE
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Operators in C / C++
Find minimum number of coins that make a given value
The Knight's tour problem | Backtracking-1
Algorithm to solve Rubik's Cube
Modulo 10^9+7 (1000000007)
Merge two sorted arrays with O(1) extra space
Program to find sum of elements in a given array
Print all possible combinations of r elements in a given array of size n
Program to print prime numbers from 1 to N.
Find next greater number with same set of digits