题意:将一个字符串表示的数字转化为 integer。
分析:
1. 首先需要丢弃字符串前面的空格;
2. 可能有正负号(注意只取一个,如果有多个正负号,那么这个字符串是无法转换的,返回0。比如测试用例里就有个“+-2”);
3. 字符串可以包含0~9以外的字符,如果遇到非数字字符,那么只取该字符之前的部分,如“-00123a66”返回为“-123”;
4. 如果超出int的范围,返回边界值(2147483647或-2147483648)。
如果不看提示的话,很少会有人一下子写对。首先条件可能考虑不周,其次就算考虑到了,怎么处理也是个问题,比如条件3和条件4,所以在面试的时候还是应该多和面试官进行沟通。
class Solution {
public int myAtoi(String str) {
int num = 0;
int sign = 1;
int n = str.length();
int i = 0;
if(n == 0) return 0;
while (str.charAt(i) == ' ' && i < n)
i++;
if (str.charAt(i) == '+') {
i++;
} else if (str.charAt(i) == '-') {
sign = -1;
i++;
}
for (; i < n; i++) {
if (str.charAt(i) < '0' || str.charAt(i) > '9')
break;
if (num > Integer.MAX_VALUE / 10
|| (num == Integer.MAX_VALUE / 10 && (str.charAt(i) - '0') > Integer.MAX_VALUE % 10)) {
return sign == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
num = num * 10 + str.charAt(i) - '0';
}
return num * sign;
}
public static void main(String[] args) {
Solution sl = new Solution();
String str = "";
System.out.println(sl.myAtoi(str));
}
}
本文介绍了一种将字符串转换为整数的有效方法,重点讨论了处理边界情况、非数字字符及溢出问题的策略。通过具体代码示例,展示了如何在Java中实现这一转换过程。
512

被折叠的 条评论
为什么被折叠?



