[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/

posted @ 2019-12-03 21:20  消灭猕猴桃  阅读(66)  评论(0编辑  收藏  举报