先计算位数,然后将num的每位放入数组(两个,一个计算最小值一个计算最大值)。
最小值:获取第1位的值作为标记,第1位置0(默认num的第一位不为1),后续若找到标记数,改为0后放入
最大值:如果开始第1个为9,直接放入;如果不为9且不为标记数,获得标记数并置9(只进行1次获取 标记数),然后放入;后续如果找到标记数,改为9后放入。
最后输出差值
class Solution {
public:
int minMaxDifference(int num) {
vector<int> f_min;//用于计算最小值的数组
vector<int> f_max;//用于计算最大值的数组
int count=num;//用于计算位数
int t=0;//位数
int max=0;//最大值
int min=0;//最小值
int temp1=0;//最小值标记数
int temp2=-1;//最大值标记数
int flag=1;//判断符
//获取位数
while(count!=0)
{
count/=10;
t++;
}
//存入数组
while(num)
{
f_min.insert(f_min.begin(),num%10);
num/=10;
}
f_max=f_min;
//最小值
for(int i=0;i<t;i++)
{
//获取标记数,第一位改为0(默认第一位不为0)
if(i==0)
{
temp1=f_min[i];
f_min[i]=0;
}
//如果找到标记数,改为0后放入
if(f_min[i]==temp1)
f_min[i]=0;
min=(min*10+f_min[i]);
}
//最大值
for(int i=0;i<t;i++)
{
//如果开始为9,直接放入
if(f_max[i]==9)
{
max=(max*10+f_max[i]);
continue;
}
else
{
//如果不为9且不为标记数,获得标记数并置9(只进行1次获取标记数),然后放入
if(f_max[i]!=9 && f_max[i]!=temp2)
{
if(flag)
{
temp2=f_max[i];
f_max[i]=9;
flag=0;
}
max=(max*10+f_max[i]);
}
else
{
//如果找到标记数,改为9后放入
if(f_max[i]==temp2)
{
f_max[i]=9;
max=(max*10+f_max[i]);
}
}
}
}
//返回差值
return (max-min);
}
};
作者:kutu1bw-i
链接:https://leetcode.cn/problems/maximum-difference-by-remapping-a-digit/solution/bao-li-jie-fa-by-kutu1bw-i-764h/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。