这个题目好多边界情况,需要注意的几个
以空格或非数字结尾,break
注意前面可以有+ 或者 - 但是不能多于一个
如果以不是数字开头 则返回0
还是要注意整数越界
public class Solution {
public int myAtoi(String str) {
List<Integer> number = new ArrayList<Integer>();
int j = 0;
boolean isStart = false;
boolean isNegative = false;
for (int i = 0; i < str.length(); i++) {
if (!isStart) {
if (str.charAt(i) == ' ') {
continue;
}
else if (str.charAt(i) == '+') {
isStart = true;
continue;
} else if (str.charAt(i) == '-') {
isNegative =true;
isStart = true;
continue;
} else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
number.add(str.charAt(i) - 48);
isStart = true;
continue;
} else {
return 0;
}
} else {
if (str.charAt(i) == ' ') {
break;
} else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
number.add(str.charAt(i) - 48);
continue;
} else {
break;
}
}
}
if (number.size() == 0) {
return 0;
}
int result = 0;
for (int i = 0; i < number.size(); i++) {
result = result * 10 + number.get(i);
if (result > 214748364 && number.size() >= i+2) {
if (isNegative) {
return -2147483648;
} else {
return 2147483647;
}
} else if (result == 214748364 && number.size() >= i+2) {
if (isNegative) {
if (number.get(i+1) >= 8) {
return -2147483648;
} else {
result = result * 10 + number.get(i+1);
return -result;
}
} else {
if (number.get(i+1) >= 7) {
return 2147483647;
} else {
result = result * 10 + number.get(i+1);
return result;
}
}
}
}
if (isNegative) {
return -result;
}
return result;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。