题解 | #《剑指offer》把字符串转换成整数(atoi)#

把字符串转换成整数(atoi)

http://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f

思路:模拟,注意对题目转换算法的理解即可,理清各种情况

空间复杂度 O(1),时间复杂度 O(n)

代码(JAVA实现)

public class Solution {
	 public int StrToInt (String s) {
	    int len=s.length();//给定的字符串长度
	    if(len==0) return 0;
	    int sign=1;//默认为正数
	    long num=0;
	    int i=0;
	    while(i<len&&s.charAt(i)==' ') i++;//直到找到第一个非空格字符
	    
	    if(i<len) {
	    	if(s.charAt(i)=='-') {//第一个非空格字符是负号
	    		sign=-1;//修改sign,表明为负数
	    		i++;//定位到下一个字符
	    	}
	    	else if(s.charAt(i)=='+') i++;//第一个非空格字符是正号
	    	//非正负号,则进入下面while循环的处理	
	    }
	    while(i<len) {
	    	if(s.charAt(i)>='0'&&s.charAt(i)<='9') {
	    		num=num*10+(s.charAt(i)-'0');
	    		if(sign==-1&&num*(-1)<Integer.MIN_VALUE) return Integer.MIN_VALUE;
	    		/*
	    		 * 注意如果上面与逻辑后写的是num>(-1)*Integer.MIN_VALUE,结果是错的,经测试(-1)*Integer.MIN_VALUE结果
	    		 * 仍为Integer.MIN_VALUE,原因溢出
	    		 */
	    		else if(sign==1&&num>Integer.MAX_VALUE) return Integer.MAX_VALUE;
	    		i++;
	    	}
	    	else break;//不是有效数字
	    }
	    int res=(int)num;//返回值要求是int,所以需要做一个强制类型转换
	    res*=sign;//带上它的符号
	    return res;
	 }
}
全部评论
Integer.MIN_VALUE和Integer.MIN_VALUE绝对值差1;可以考虑:if(sign==-1 && num-1 > Integer.MAX_VALUE) return Integer.MIN_VALUE;
点赞 回复 分享
发布于 2022-03-13 20:53
num=num*10+(s.charAt(i)-'0');什么意思?
点赞 回复 分享
发布于 2023-06-19 20:25 广东

相关推荐

序&nbsp;朋友们,好久不见。&nbsp;笔者在过去消失的五个月里被困在情绪牢笼中过的相当煎熬,一度丢失自己,觉得整个世界都是昏暗的。&nbsp;庆幸的是靠着自己纯硬扛也是走出来了。表达欲再度回归,所以真的很开心还有机会能在再和大家见面。&nbsp;破碎秋招&nbsp;抑郁情绪的引爆点必然是秋招期间遭受的打击了,从去年九月份腾讯转正被告知失败之后就开始疯狂投递简历,每天都在经历:简历挂、一面挂、二面挂、三面挂、HR面挂,每天睁开眼就被无所适从的挫败感包围。&nbsp;秋招的特点是即便流程走到最后一步也不一定会&nbsp;offer,因为还需要进入大池子进行横向对比,俗称泡池子,而这一泡我的大多数面试流程到后面就没了后文,这一度让我感觉非常绝望。我深知自己学历并...
SoNiC_X:我已经工作快2年了,当时高考没考好没去到想去的学校,觉得天要塌了;校招找不到工作,觉得天要塌了;现在工作觉得看不到未来,觉得天要塌了;最近最大的感悟就是:天会一直塌,但是生活也会一直继续下去,还是要调整好自己的心态,不要因为一时的困难把自己困住,要记住完蛋的日子永远在后头
点赞 评论 收藏
分享
不愿吃饼的变色龙很感性:89k,那你得年薪1000w多
点赞 评论 收藏
分享
评论
8
1
分享

创作者周榜

更多
牛客网
牛客企业服务