[LeetCode]8. 字符串转换整数 (atoi)
题目
解法
这道题将字符串转化为整数,需要考虑多种情况
1.如果字符串开头为空格则需要跳过空格到第一个字符
2.需要判断第一个字符是符号+/-,并用sign标记
3.如果下个字符不是数字则结束循环
4.如果下个字符是数字则转化为整形存储下来
5.考虑溢出情况,如果溢出则用32位整形边界值代替返回值
class Solution {
public int myAtoi(String str) {
if(str.isEmpty())return 0;
//sign=1表示正数,sign=-1表示负数。用i跟踪有效下标
int sign = 1, base = 0, i = 0, n = str.length();
//跳过字符串前部空格
while(i < n && str.charAt(i) == ' ') ++i;
//判断第一个有效字符是否为+ -,并更新sign值
if(i < n && (str.charAt(i) == '+' || str.charAt(i) == '-')) {
sign = (str.charAt(i++) == '+') ? 1 : -1;
}
//这里直接进行字符比较,也就是用字符对应的ASCII码进行比较
while(i < n && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
//判断溢出
if(base > Integer.MAX_VALUE/10 || (base == Integer.MAX_VALUE/10 && str.charAt(i)-'0'>7)){
return (sign == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
base = 10 * base + (str.charAt(i++) - '0');
}
return base * sign;
}
}
参考
https://leetcode-cn.com/problems/string-to-integer-atoi/