思路
常规做法根据题意只需要对字符串进行遍历并对字符进行判断即可,先去获取正负号(正号可能会省略),获取数字也是通过从大到小累加起来,用INT_MAX/10来判断当前数是否越界(因为当前数是要先加上num,因此INT_MAX需要先减去num),对最后的结果只需要根绝一开始的正负号返回对应正负数即可。
代码
class Solution {
public:
int myAtoi(string s) {
int len=s.size();
int i=0;
int res=0;
while(i<len&&s[i]==' '){
++i;
}
int flag=1;
if(i<len&&(s[i]=='-'||s[i]=='+')){
flag=s[i++]=='-'?-1:1;
}
while(isdigit(s[i])){
int num=s[i]-'0';
if(res>(INT_MAX-num)/10)return flag==1?INT_MAX:INT_MIN;
res=res*10+num;
++i;
}
return res*flag;
}
};