找到最小的数字(不以零开头),可以通过重新排列给定数字的位数来获得。
例子:
Input: n = 846903
Output: 304689
Input: n = 55010
Output: 10055
步骤以找到最小的数字。
- 计算数字中每个数字的频率。
- 将最小的数字(0除外)放在所需数字的最左侧。
并将该数字的频率减1。 - 从左到右按升序排列所有剩余数字。
该解决方案基于计数排序。
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