题目描述:
给你一个整数 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
来源:力扣(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)?true:false;
string str = to_string(abs(num));
vector<int> vect(10, 0);
for (auto &it : str) {
vect[it - '0']++;
}
string str_ans = "";
if (neg) {
for (int i = 9; i >= 0; i--) {
str_ans += string(vect[i], i+'0');
}
} else {
int i = 1;
while (i <= 9) {
if (vect[i] != 0) {
str_ans += string(1, i+'0');
vect[i] -= 1;
break;
}
i++;
}
str_ans += string(vect[0], '0');
while (i <= 9) {
str_ans += string(vect[i], i+'0');
i++;
}
}
long long ans = stol(str_ans);
return (neg)?-ans:ans;
}
};