题意:
方法:
模拟:
思路:直接模拟。
用 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; } } 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;//正数 } };
时间复杂度:
空间复杂度:![]()