
给你一个整数 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 。
提示:
-10^15 <= num <= 10^15来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/smallest-value-of-the-rearranged-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
long long smallestNumber(long long num) {
bool neg = num < 0;
vector<int> ct(10, 0);
num = abs(num);
while(num)
{
ct[num%10]++;
num /= 10;
}
long long ans = 0;
if(neg)
{
for(int i = 9; i >= 0; --i)
{
while(ct[i]--)
ans = ans*10+i;
}
return -ans;
}
else
{
for(int i = 1; i <= 9; ++i)
{
if(ct[i])
{
ans = i;
ct[i]--;
break;
}
}
for(int i = 0; i <= 9; ++i)
{
while(ct[i]--)
ans = ans*10+i;
}
return ans;
}
}
};0 ms 5.9 MB C++