思路:模拟,注意对题目转换算法的理解即可,理清各种情况
空间复杂度 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;
}
}