解题
思路
- 核心是分类讨论
- 将数转成字符串,便于截取操作;同时,将数转成字符数组,便于替换
- 根据要求,若要差值最大,需找到最小值,最大值。
- 注意不能有前导0
- 14ms 待优化
代码
public int maxDiff(int num) {
String s = String.valueOf(num);
int len= s.length();
char[] chars = s.toCharArray();
String s1="";
String s2="";
int max=0,min=0;
if(len<=1) return 8;
int index=0;
//寻找最大数
while(index<len&&s.charAt(index)=='9'){
index++;
}
s1=s.substring(0,index);
char c=s.charAt(index);
for(int i=index;i<len;i++){
if(chars[i]==c){
chars[i]='9';
}
s1+=chars[i];
}
max=Integer.parseInt(s1);
index=0;
// System.out.println("max:"+max);
//寻找最小数
chars=s.toCharArray();
if(s.charAt(0)!='1'){
c=s.charAt(0);
for(int i=index;i<len;i++){
if(chars[i]==c){
chars[i]='1';
}
s2+=chars[i];
}
min=Integer.parseInt(s2);
}else{
index=1;
while(index<len&&(s.charAt(index)=='0'||s.charAt(index)=='1')){
index++;
}
//例如 1000 此时index会越界 需要对index进行处理v
index=Math.min(index,len-1);
c=s.charAt(index);
s2=s.substring(0,index);
for(int i=index;i<len;i++){
if(chars[i]==c){
chars[i]='0';
}
s2+=chars[i];
}
min=Integer.parseInt(s2);
}
// System.out.println("min:"+min);
return max-min;
}