leetcode刷题(2022.05.08)
昨天还写了一道题,不过比较简单,就不发了,今天继续写一下。
2165. Smallest Value of the Rearranged Number
难度:中等
题目大意
对一个整数中的数字进行重排,要求重排之后最小,同时0不能出现在首位。
返回重排的数字
解题思路
记录0-9每个数字的次数,对于负数数字越大放在最前面,对于正数数字越小放在越前面(0不能在最前)。即可。
代码
class Solution {
public:
long long smallestNumber(long long num) {
if(!num) return 0;
vector<int>a;
long long ans=0,d=abs(num);
while(d)
{
a.push_back(d%10);
d/=10;
}
sort(a.begin(),a.end());
if(num<0)
{
for(int i=0;i<a.size();++i)
{
ans+=pow(10,i)*a[i];
}
ans=-ans;
}
else
{
if(a[0]==0)
{
for(int i=1;;++i)
{
if(a[i]!=0)
{
swap(a[i],a[0]);break;
}
}
}
for(int i=0;i<a.size();++i)
{
ans+=a[i]*pow(10,a.size()-i-1);
}
}
return ans;
}
};
过题情况
优化
思路上没什么了,代码写的有点冗余,看了官方题解里面再负数情况下用了一个reserve()函数,逆序随后两种情况使用一种计算方式。