文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个整数 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 记录正负,对每个位的数字是几进行统计个数
- 负数的话,从9往后排,正数的话,先取出一个非零的最小的数,再从0往后排
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++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!