解析:这个题关键的就是看懂题目。根据步骤写代码即可。
提取整数和判断是否溢出,使用了与“整数反转”那道题同样的思想。
Java:
class Solution {
public int myAtoi(String s) {
int n=s.length();
int sign=1,res=0,i=0;
while(i<n&&s.charAt(i)==' '){ //舍弃空格
i++;
}
int start=i;
for(;i<n;i++){
if(i==start&&s.charAt(i)=='-'){ //一定注意 要加上i==start
sign=-1;
}
else if(i==start&&s.charAt(i)=='+'){
sign=1;
}
else if(Character.isDigit(s.charAt(i))){
int num=s.charAt(i)-'0'; //注意要由ASCII码转为数字
if(res>214748364||(res==214748364&&num>7)){
return Integer.MAX_VALUE;
}
if(res<-214748364||(res==-214748364&&-num<-8)){
return Integer.MIN_VALUE;
}
res=res*10+sign*num;
}
else break;//如果是字符,则退出循环
}
return res;
}
}
C++:
class Solution {
public:
int myAtoi(string s) {
int n=s.size();
int sign=1,res=0,i=0;
while(i<n&&s[i]==' '){
i++;
}
int start=i;
for(;i<n;i++){
if(i==start&&s[i]=='-'){
sign=-1;
}
else if(i==start&&s[i]=='+'){
sign=1;
}
else if(isdigit(s[i])){
int num=s[i]-'0';
if(res>214748364||(res==214748364&&num>7)){
return INT_MAX;
}
if(res<-214748364||(res==-214748364&&-num<-8)){
return INT_MIN;
}
res=res*10+sign*num;
}
else break;
}
return res;
}
};