2566. 替换一个数字后的最大差值
思路:直接模拟每个位置都替换0~9。
class Solution {
public:
int minMaxDifference(int num) {
int maxx=0,minn=INT_MAX;
bool sta[10];
memset(sta,0,sizeof sta);
vector<int> v;
while(1){
v.push_back(num%10);
num/=10;
if(num==0) break;
}
reverse(v.begin(),v.end());
for(int i=0;i<v.size();i++){
if(sta[v[i]]) continue;
sta[v[i]]=1;
for(int j=0;j<10;j++){
int tmp=0;
for(int k=0;k<v.size();k++){
if(v[i]==v[k]) tmp=tmp*10+j;
else tmp=tmp*10+v[k];
}
maxx=max(maxx,tmp);
minn=min(minn,tmp);
}
}
return maxx-minn;
}
};
方法二,贪心,从左往右找到第一个不是9的数字,将该数字都替换为9,这是最大值;同理,将num最高位对应的数字,都改成0,就是最小值
class Solution {
public:
int minMaxDifference(int num) {
string s=to_string(num);
int tmp1=-1,tmp2=-1;
int maxx=0,minn=0;
for(int i=0;i<s.size();i++){
if(tmp1==-1&&s[i]!='9'){
tmp1=s[i];
}
if(tmp2==-1&&s[i]!='0'){
tmp2=s[i];
}
if(s[i]==tmp1){
maxx=maxx*10+9;
}else{
maxx=maxx*10+s[i]-'0';
}
if(s[i]==tmp2){
minn=minn*10+0;
}else{
minn=minn*10+s[i]-'0';
}
//cout<<maxx<<" "<<minn<<endl;
}
return maxx-minn;
}
};