【思路1-Java】
要注意几点细节,
1. 如果结果在[Integer.MIN_VALUE, Integer.MAX_VALUE]之外要怎么处理
2. 如果第一个字符为加减号怎么处理
3. 如果遇到的不是数字怎么处理
主要也就是这 3 个问题,处理好了也就没什么问题了:
public class Solution {
public int myAtoi(String str) {
str = str.trim();
if ("".equals(str)) return 0;
int sign = 1, index = 0;
double result = 0;
if (str.charAt(index) == '+') {
index++;
} else if (str.charAt(index) == '-') {
index++;
sign = -1;
}
for (int i = index; i < str.length() && str.charAt(i) >= '0' && str.charAt(i) <= '9'; i++) {
result = result * 10 + str.charAt(i) - 48;
if (result > Integer.MAX_VALUE) {
if (sign == 1) return Integer.MAX_VALUE;
else return Integer.MIN_VALUE;
}
}
return (int)(sign * result);
}
}
1045 / 1045
test cases passed. Runtime: 4 ms Your runtime beats 35.97% of javasubmissions.
【思路2-Python】
用 Python 实现,采用正则表达式
class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
if re.match("[ ]*[-+]?\d+", str): #贪婪模式匹配开头的空格,至多1个符号位,至少一个数字
r = re.search("(-?\d+)", str); #如果匹配上了上一行结果,那么还得用lazy模式匹配-号
if r:
return max(-2147483648, min(2147483647, int(r.group(1))))
return 0
1047 / 1047
test cases passed. 1047 / 1047 test cases passed. Your runtime beats 12.69% of pythonsubmissions.