LeetCode008——字符串转整数(atoi) - Go语言中文社区

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


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

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

题目描述:

知识点:字符串

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

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

(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解题报告:

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_41231926/article/details/81937330
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 01:12:30
  • 阅读 ( 1346 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢