一、题目
二、思路解析
1.思路:
依次遍历,查看当前字符是否在规定范围内
2.常用方法:
1.trim(),去字符串的首尾空字符
s=s.trim();
2.substring(beginIndex),截断字符串,得到新的字符串是[1,s.length()-1]
s=s.substring(1);
3.startsWith("+"),检查字符串是否以指定的前缀开头,注意:参数不能是‘+’
if(s.startsWith("+"))
3.核心逻辑:
1.首先去掉字符串中的符号(+/-),用smyble变量来表示其是+/-;
int smyble=1;//默认为正数//1.情况一:为负数
if(s.startWith("-")){symble=-1;s=s.substring(1);//去除掉字符串s的第一个字符“-”
}
//2.情况二:为正数
else if(s.startWith("+"){//因为默认为正数s=s.substring(1);//去除掉字符串s的第一个字符“+”
}//情况三:其余情况是字符串s首字符非+/-,就默认为“+”
2. 统计有效数字
√.注意事项:
a.res必须为long值,因为long的范围比int大,为了防止溢出
b.比较是否超过范围界限时,需要加入符号
long res=0;for(int i=0;i<s.length();i++){int cnt=s.charAt(i)-'0';if(cnt>=0&&cnt<10){res=res*10+cnt;//判断是否在规定的int范围内,如果超过了就返回Integer的最大和最小值//注意事项:比较的值是res*symble,如果比较的是res,res只能是正数if(smyble*res>Integer.MAX_VALUE){return Integer.MAX_VALUE;
}if(smyble*res<Integer.MIX_VALUE){return Integer.MIX_VALUE;
} continue; //进入下一个循环
}else{break; //退出循环
}}
3.返回结果,要强制,因为res为long类型,同时也要带上符号
return (int)res*symble;
三、代码实现
class Solution {public int myAtoi(String s) {s=s.trim();//去掉字符串前后的空白格if(s==null||s.length()==0){return 0;}int smybol=1;if(s.startsWith("-")){smybol=-1;s=s.substring(1);}else if(s.startsWith("+")){s=s.substring(1);}long res=0;for(int i=0;i<s.length();i++){int cnInt=s.charAt(i)-'0';if(cnInt>=0&&cnInt<10){res=res*10+cnInt;if(res*smybol>Integer.MAX_VALUE){return Integer.MAX_VALUE;}else if(res*smybol<Integer.MIN_VALUE){return Integer.MIN_VALUE;}else{continue;}}break;}return (int) res*smybol;}
}