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



京公网安备 11010502036488号