题目
https://leetcode.cn/problems/string-to-integer-atoi/
关键部分
已在标注中说明。不过我还是想说,其实这个题的思路比较简单,但很多地方由于手生出现了很可惜(高情商)的问题,比如for循环第一个位置并不总是int i=0,一定要具体问题具体分析
题解
class Solution {
public:
int myAtoi(string s) {
int i=0,flag=1,res=0,len=s.size();
while(s[i]==' '&&i<len) i++;
int start=i;//如果中途遇到+和-,直接退出
for(;i<len;i++){//注意这里不要习惯性地加上int i=0
if(isdigit(s[i])){
int t=s[i]-'0';
if(res>INT_MAX/10||(res==INT_MAX/10&&t>INT_MAX%10)){
return INT_MAX;
}
else if(res<INT_MIN/10||(res==INT_MIN/10&&-t<INT_MIN%10)){//INT_MIN%10也是负数,只有比它小才能超出它
return INT_MIN;
}
res=res*10+flag*t;
}
else if(i==start&&s[i]=='-'){
flag=-1;
}
else if(i==start&&s[i]=='+'){
flag=1;
}
else break;
}
return res;
}
};
说明
该博客主要是为了博主自己复习用,选择的题解很多都是借鉴leetcode上大佬的解答且解释性较差。但大家放心,我选择的基本都是精妙且容易理解的answer,晦涩难懂的解答我是不会选的(比如这题,官网给的是有限自动机,就挺离谱的,这不是编译原理的东西吗)。
另外,我选择的语言是c++,已经习惯了,其它语言的解答官网也有,大家自行查看