题意:
        



方法一:
模拟

思路:

        直接模拟。
        用 flag 判断正负,x 计算数的绝对值。
        最后判断边界:是否大于正数的最大值 or 小于负数的最小值。



class Solution {
public:
    
    int StrToInt(string s) {
        int len=s.size();
        long long x=0;
        int flag=0;//0表示正数,1表示负数
        int f=0;
        int num=0;
        for(int i=0;i<len;i++){
            if(f==0&&s[i]=='+'){//正号
                flag=0;
                num++;
            }else if(f==0&&s[i]=='-'){//负号
                flag=1;
                num++;
            }else if(f==0&&s[i]==' '){//空格
                continue;
            }else if(isdigit(s[i])){//数字
                if(num>1)
                    return 0;
                x=x*10+(s[i]-'0');
                f=1;
                if(x>(1ll<<31))
                    break;
            }else{
                break;
            }
        }
//         cout << flag << endl;
        if(flag==0&&x>(1ll<<31)-1){//大于正数的最大值
            return (1ll<<31)-1;
        }
        if(flag==1&&x>(1ll<<31)){//小于负数的最小值
            return 0-(1ll<<31);
        }
        if(flag==1)//负数
            return 0-x;
        return x;//正数
    }
};


时间复杂度:
空间复杂度:


方法二:
java实现

思路:
           思路参照方法一。
            直接模拟。
            但要注意 java long类型是8个字节,而且还要强制类型转换。 

import java.util.*;


public class Solution {
    
    public int StrToInt (String s) {
        int len=s.length();
        long x=0;
        int flag=0;//0表示正数,1表示负数
        int f=0;
        int num=0;
        for(int i=0;i<len;i++){
            if(f==0&&s.charAt(i)=='+'){//正号
                flag=0;
                num++;
            }else if(f==0&&s.charAt(i)=='-'){//负号
                flag=1;
                num++;
            }else if(f==0&&s.charAt(i)==' '){//空格
                continue;
            }else if(s.charAt(i)>='0'&&s.charAt(i)<='9'){//数字
                if(num>1)
                    return 0;
                x=x*10+(s.charAt(i)-'0');
                f=1;
                if(x>(1l<<31))
                    break;
            }else{
                break;
            }
        }
//         cout << flag << endl;
        if(flag==0&&x>(1l<<31)-1){//大于正数的最大值
            return (int)((1l<<31)-1);
        }
        if(flag==1&&x>(1l<<31)){//小于负数的最小值
            return (int)(0-(1l<<31));
        }
        if(flag==1)//负数
            return (int)(0-x);
        return (int)x;//正数
    }
}


时间复杂度:
空间复杂度: