请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:
注意:
示例 1:
输入:s = "42"
输出:42
示例 2:
输入:s = " -42"
输出:-42
示例 3:
输入:s = "4193 with words"
输出:4193
提示:
这道题用简单的模拟法来解。
主要步骤如下:
class Solution {
public int myAtoi(String s) {
s = s.trim();
int index = 0, flag = 1, res = 0;
if (index < s.length() && (s.charAt(index) == '+' || s.charAt(index) == '-')) {
flag = s.charAt(index++) == '+' ? 1 : -1;
}
while(index < s.length() && Character.isDigit(s.charAt(index))){
int digit = s.charAt(index) - '0';
if(res > (Integer.MAX_VALUE - digit) / 10){
return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
res = res * 10 + digit;
++index;
}
return flag * res;
}
}
这道题就用模拟法的方式来解,就好了,核心是如何判断越界。不能在计算完res值之后再判断越界,要在计算res值之前判断是否越界。