LeetCode008——字符串转整数(atoi)

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/string-to-integer-atoi/description/

题目描述:

LeetCode008——字符串转整数(atoi)_第1张图片

知识点:字符串

思路:顺序遍历字符串,根据题意读取整数

对于这一题来说,难点不在算法的实现上,难点在理解题意并正确处理各种边界或者特殊情况上。

(1)如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。

(2)如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

(3)如果第一个非空字符既不是正号或负号,也不是数字,返回0。

(4)如果字符串为空,或者字符串内只包含空字符,返回0。

(5)如果第一个非空字符是正号或负号,但接下来的第二个字符不是数字,返回0。对于"+-2"、"+ 2"这两种情况,都返回0。

(6)如果数值超过可表示的范围 [−2^31,  2^31 − 1],则返回  INT_MAX (2^31 − 1) 或 INT_MIN (−2^31) 。实现时用Integer.valueOf()函数抛出的异常来判断整数越界

注意:字符比较要用"==",但字符串比较要用equals()方法。

时间复杂度和给的字符串中第一个空白字符出现的位置,以及其后或者第一个正负号其后连续的数字个数有关,但一定是小于O(n)时间复杂度的,其中n为字符串的长度。空间复杂度和时间复杂度相同。

JAVA代码:

public class Solution {
	
	public int myAtoi(String str) {
		int n = str.length();
		int i = 0;
		while(i < n && str.charAt(i) == ' ') {
			i++;
		}
		if(i == n || !((str.charAt(i) == '+') || (str.charAt(i) == '-') ||(str.charAt(i) >= '0' && str.charAt(i) <= '9'))) {
			return 0;
		}
		StringBuilder stringBuilder = new StringBuilder();
		if(str.charAt(i) == '-') {
			stringBuilder.append('-');
			i++;
		}else if(str.charAt(i) == '+') {
			i++;
		}
		if(i == n || !(str.charAt(i) >= '0' && str.charAt(i) <= '9')) {
			return 0;
		}
		while(i < n && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
			stringBuilder.append(str.charAt(i));
			i++;
		}
		try {
			return Integer.valueOf(stringBuilder.toString());
		}catch (Exception e) {
			if(stringBuilder.substring(0, 1).equals("-")) {
				return Integer.MIN_VALUE;
			}else {
				return Integer.MAX_VALUE;
			}
		}
    }
}

LeetCode解题报告:

LeetCode008——字符串转整数(atoi)_第2张图片

 

你可能感兴趣的:(LeetCode题解)