题解 | #《剑指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 广东

相关推荐

吾族血脉,自吾始立铁律:凡我子孙,胆敢研习计算机之术者,当受七窍流血之刑!若见Python之书,必遭雷殛;若触Java代码,定为不孝!键盘鼠标准入族谱秽物录,显示器乃摄魂邪镜祖祠前当立戒碑:"二进制者,断子绝孙之道也!"算法者,乱我族心智之毒也!数据结构,毁我门风之刃也!倘有逆子偷装&nbsp;vscode,即按祖规捆于祠堂梁柱,令其DEBUG至死不得解脱!今颁天条三则:壹)三代血亲不得报考计算机系违者削去辈分,永世称码奴贰)族中幼童须背《戒算经》"if-else咒,switch符,皆是断头术"叁)凡见子侄讨论编程者须即刻砸其电脑,焚其书籍泼黑狗血于键盘之上!太祖母口谕:"吾宁要文盲孙,不要程序员!"尔...
好吃的薯饼:姐妹这不是我们计算机系吧,我们计算机系的都在言情小说里当黑客大佬,各种竞赛拿奖拿到手软,公司系统道路监控随便入侵。身体线条非常优美,挺拔的站姿十分端正,给人以强壮有内涵的感觉。脸庞轮廓深刻,五官分明透露着对太阳底下最光辉的职业的向往和坚定,尤其是那双深邃的眼睛,写满了对代码和计算机系统的热情和无限的活力。我们计算机系是天之骄子、明日之星,人手一个博士学位不然高中电脑老师都当不上。组会的时候,面对导师和同事的疑难问题,也能够回答自如。我们总是把高高的发际线当做荣耀的象征。妈咪这不素我们计算机系吧,集美集帅怎么只会写hello world?
点赞 评论 收藏
分享
评论
8
1
分享

创作者周榜

更多
牛客网
牛客企业服务