2165. 重排数字的最小值
给你一个整数 num 。重排 num 中的各位数字,使其值 最小化 且不含 任何 前导零。
返回不含前导零且值最小的重排数字。
注意,重排各位数字后,num 的符号不会改变。
示例 1:
输入:num = 310
输出:103
解释:310 中各位数字的可行排列有:013、031、103、130、301、310 。
不含任何前导零且值最小的重排数字是 103 。
示例 2:
输入:num = -7605
输出:-7650
解释:-7605 中各位数字的部分可行排列为:-7650、-6705、-5076、-0567。
不含任何前导零且值最小的重排数字是 -7650 。
提示:
- -1015 <= num <= 1015
思路
简单的模拟
class Solution {
public:
long long smallestNumber(long long num) {
int nums[12];
memset(nums,0,sizeof nums);
bool isnature =false;
if(num < 0)
{
num = -num;
}
else
{
isnature =true;
}
while(num)
{
nums[num%10]++;
num/=10;
}
long long res =0;
if(!isnature)
{
for(int i = 9 ; i >=0 ; i--)
{
while(nums[i])
{
res = res*10+i;
nums[i]--;
}
}
res = -res;
}
else{
for(int i = 1 ; i <=9;i++)
{
if(nums[i])
{ res = res*10+i;
nums[i]--;
break;
}
}
for(int i = 0 ; i <=9;i++)
{
while(nums[i])
{
res = res*10+i;
nums[i]--;
}
}
}
return res;
}
};