题目:1432. 改变一个整数能得到的最大差值
思路:让值最大,从左到右,让第一个不为’9’的数字变为’9’。
同理,让值最小,从左到右,让第一个不为‘0’和’1’的数字变为‘0’或’1’。如果第一个不为‘0’和’1’的数字不是第一个,那变为’0’,是第一个就变为’1’。
C++版本:
class Solution {
public:
int maxDiff(int num) {
string s=to_string(num);
int i=0;
for(;i<s.size();i++){
if(s[i]!='9') break;
}
if(i!=s.size()){
char c=s[i];
for(;i<s.size();i++){
if(s[i]==c){
s[i]='9';
}
}
}
int mx=stoi(s);
s=to_string(num);
i=0;
for(;i<s.size();i++){
if(s[i]=='1'||s[i]=='0') continue;
break;
}
if(i!=s.size()){
char c=s[i];
char t='1';
if(i!=0) t='0';
for(;i<s.size();i++){
if(s[i]==c){
s[i]=t;
}
}
}
int mn=stoi(s);
return mx-mn;
}
};
JAVA版本:
class Solution {
public int maxDiff(int num) {
String s=String.valueOf(num);
char[] c=s.toCharArray();
int i=0;
for(;i<c.length;i++){
if(c[i]!='9') break;
}
if(i!=c.length){
char tmp=c[i];
for(;i<c.length;i++){
if(c[i]==tmp){
c[i]='9';
}
}
}
int mx=Integer.parseInt(new String(c));
c=s.toCharArray();
i=0;
for(;i<c.length;i++){
if(c[i]=='1'||c[i]=='0') continue;
break;
}
if(i!=c.length){
char cc=c[i];
char tmp ='1';
if(i!=0) tmp='0';
for(;i<c.length;i++){
if(c[i]==cc){
c[i]=tmp;
}
}
}
int mn=Integer.parseInt(new String(c));
return mx-mn;
}
}
Go版本:
func maxDiff(num int) int {
s:=strconv.Itoa(num)
c:=[]byte(s)
i:=0
for ;i<len(c);i++ {
if c[i]!='9' {
break;
}
}
if i!=len(c) {
t:=c[i]
for ;i<len(c);i++ {
if t==c[i] {
c[i]='9'
}
}
}
mx,_:=strconv.Atoi(string(c))
c=[]byte(s)
i=0
for ;i<len(c);i++ {
if c[i]=='1'||c[i]=='0' {
continue;
}
break;
}
if i!=len(c) {
t:=c[i]
cc:='1'
if i!=0 {
cc='0'
}
for ;i<len(c);i++ {
if t==c[i] {
c[i]=byte(cc)
}
}
}
mn,_:=strconv.Atoi(string(c))
return mx-mn
}