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

空间复杂度 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;
	 }
}