一,题目
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
二,思路
和数字翻转的类似
需要注意的点儿如下:
1,字符0-9的ascii码取值范围
2,前后空格的去除
3,首位正负号的去除
4,字符串中间的出现非0-9字符,则取消转换,得到的值是当前的
5,int类型溢出返回其int最大值或者最小值
6,使用long进行存放结果,但是存放结果的long值也可能出现溢出,所以每次遍历到一个合法字符都需要进行判断int类型是否溢出
三,代码
public int myAtoi(String str) {
if(str == null || str.length() == 0){
return 0;
}
str = str.trim();
int pointer = 0;
boolean isNegative = false;
if(str.startsWith("-")){
isNegative = true;
pointer = 1;
}
if(str.startsWith("+")){
pointer = 1;
}
long result =0;
for(int i=pointer,len = str.length() ;i<len; i++){
char c = str.charAt(i);
//0的ascii码对应48,9的ascii码对应57
if(c>=48 && c <= 57){
result = result * 10 + (c -48);
}else{
break;
}
if(result >= Integer.MAX_VALUE && !isNegative){
return Integer.MAX_VALUE;
}
if(result > Integer.MAX_VALUE ){
result *= -1;
if(result <= Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}
return Integer.MAX_VALUE;
}
}
if(isNegative){
result *= -1;
}
return (int)result;
}