这个题目有点毒啊,开始我以为是将所有非数字,非正负符号的其它符号都去掉,剩下的组成一个数字,溢出返回0。后来发现,
1、首先是将空格去掉
2、其次判断第一个符号是正负号,还是数字,还是其它的东西,是其它东西返回0,否则继续向后
3、向后遍历,遇到其它符号就停止,仅仅使用之前遍历的数字,之后就算还有数字也不管了
4、判断是否溢出,若溢出,将边界值返回,就是将int范围返回。
这些条件是慢慢试出来的,所以代码并不是一上来就按这个思路写的,仅供参考
public int atoi (String str) {
// write code here
if (str.isEmpty()){
return 0;
}
str = str.replaceAll(" ", ""); //去掉所有空格
//System.out.println("str:" + str);
char first = '0';
char last = '9';
int count = 0;
int negative = 0; //判断有无负号
int positive = 0; //判断有无正数
int[] ans = new int[100];
double val = 0;
for (int i = 0; i < str.length(); i++){
char temp = str.charAt(i);
if (temp >= first && temp <= last){
ans[count] = temp - '0';
count++;
}else if (count == 0 && (temp == '+' || temp == '-')){
if (temp == '+'){
positive = 1;
}else if (temp == '-'){
negative = 1;
}
}else{
break;
}
}
//System.out.println("count:" + count);
for (int i = 0; i < count; i++){
double tmp = 1;
for (int j = count - 1 - i; j > 0; j--){
tmp = tmp * 10;
}
val = ans[i] * tmp + val;
}
if (negative == 1){
val = -val;
}
if (val >= Integer.MAX_VALUE){
//System.out.println("chn");
return Integer.MAX_VALUE;
}
if (val <= Integer.MIN_VALUE ){
return Integer.MIN_VALUE;
}
return (int)val;
}


京公网安备 11010502036488号