这个题目有点毒啊,开始我以为是将所有非数字,非正负符号的其它符号都去掉,剩下的组成一个数字,溢出返回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; }