📌  相关文章
📜  通过重新排列给定数字的最小数字

📅  最后修改于: 2021-05-04 18:04:57             🧑  作者: Mango

找到最小的数字(不以零开头),可以通过重新排列给定数字的位数来获得。
例子:

Input: n = 846903
Output: 304689

Input: n = 55010
Output: 10055

步骤以找到最小的数字。

  1. 计算数字中每个数字的频率。
  2. 将最小的数字(0除外)放在所需数字的最左侧。
    并将该数字的频率减1。
  3. 从左到右按升序排列所有剩余数字。

该解决方案基于计数排序。

C++
// C++ program for finding smallest number
// from digits of given number
#include
using namespace std;
 
// function to find the smallest number
int smallest(int num)
{
    // initialize frequency of each digit to Zero
    int freq[10] = {0};
 
    // 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
    }
 
    // Set the LEFTMOST digit to minimum expect 0
    int result = 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;
 
    return result;
}
 
// Driver Program
int main()
{
    int num = 570107;
    cout << smallest(num);
    return 0;
}


Java
// Java program for finding smallest number
// from digits of given number
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)
        {
            int d = num % 10; // extract last digit
            freq[d]++; // increment counting
            num = num / 10; //remove last digit
        }
      
        // 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(String args[])
    {
        int num = 570107;
        System.out.println(smallest(num));
    }
}
// This code is contributed by Sumit Ghosh


Python
# Function to find the smallest number
def 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 program
if __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#
// C# program for finding smallest
// number from digits of given
// number
using 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
 0)
        {
            $result = $result * 10 + $i;
            $freq[$i] -= 1;
        }
 
    return $result;
}
 
// Driver Code
$num = 570107;
echo smallest($num);
 
// This code is contributed by mits
?>


Javascript


输出:

100577