LeetCode8. 字符串转换整数 (atoi)(含有详细注释)

题目描述

LeetCode8. 字符串转换整数 (atoi)(含有详细注释)_第1张图片
LeetCode8. 字符串转换整数 (atoi)(含有详细注释)_第2张图片
LeetCode8. 字符串转换整数 (atoi)(含有详细注释)_第3张图片

public class Solution {

	public int myAtoi(String str) {
		int len = str.length();
		//先将字符串转换为字符数组
		char[] charArray = str.toCharArray();
		
		//忽略前导空格
		int index = 0;
		while (index < len && charArray[index] == ' ') {
			index++;
		}
		
		//排除全为空格个字符串
		if (index == len) {
			return 0;
		}

		//确定数字的正负
		int sign = 1;//sign存储正负号,默认为正
		char firstChar = charArray[index];
		if (firstChar == '-') {
			sign = -1;
			index++;
		} else if (firstChar == '+') {
			index++;
		}
		
		//得出结果,并用res存储
		int res = 0;
		while (index < len) {
			char curChar = charArray[index];
			//当遇到非数字时,跳出循环,否则继续按照下面的逻辑进行
			if (curChar < '0' || curChar > '9') {
				break;
			}
			
			//判断临界条件
			
			int max = Integer.MAX_VALUE, min = Integer.MIN_VALUE;
			
		
			//如果大于32的最大值 即Integer的最大值时 返回Integer的最大值
			if (res > max / 10 || (res == max / 10 && (curChar - '0') > (max % 10))) {
				return max;
			}
			
			//如果小于32的最小值 即Integer的最小值时 返回Integer的最小值
			//min%10 为负数  而	(curChar - '0')的值为 0-9 所以在(min % 10)前加负号 进而确定是否小于最小值
			if (res < min / 10 || (res == min / 10 && (curChar - '0') > -(min % 10))) {
				return min;

			}
			//每一次都乘sign 再相加 ,这样能确定结res一直为正 或者 res一直为一直为负
			res = res * 10 + sign * (curChar - '0');
			//每一次都向后移,以保证算法的持续进行
			index++;

		}
		return res;
	}

}

你可能感兴趣的:(leetcode,算法,职场和发展)