版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l718531794/article/details/84534567
题目地址:https://leetcode-cn.com/problems/string-to-integer-atoi/
题意:还挺烦的一道题,将给出的字符串在特定条件下进行一个转化。
思路:考虑好特判,主要情况就是前导0的处理,溢出用长度来处理即可。这个代码12ms-20ms都跑过,所以我也不知道他到底能击败多少人。
AC代码:
class Solution {
public:
int myAtoi(string str) {
int length = str.length();
int max_x = 2147483647;
char max_str[15] = "2147483647";
int min_x = -2147483648;
int s = -1;
char min_str[15] = "2147483648";
int flag = 1;
for(int i=0;i<length;i++){
if(str[i]!=' '){
s = i;
if(str[i] == '-' || str[i] == '+'){
s += 1;
if(str[i]=='-')
flag = -1;
}
break;
}
}
int temp = s;
for(int i = s;i<=length;i++){
if(str[i]!='0'){
temp = i;
break;
}
}
s = temp;
if(str[s]<'0' || str[s]>'9' || s==-1 || s>=length)
return 0;
int e = s+1;
for(int i = s+1;i<=length;i++){
if(str[i]<'0' || str[i]>'9'){
e = i;
break;
}
}
int sum = 0;
if(e-s>10){
if(flag==1)
return max_x;
else
return min_x;
}
if(e-s==10){
for(int i=s,p=0;i<e;i++,p++){
if(flag==1){
if(str[i]>max_str[p])
return max_x;
if(str[i]<max_str[p])
break;
}else{
if(str[i]>min_str[p]){
return min_x;
}
if(str[i]<min_str[p])
break;
}
}
}
for(int i = s;i<e;i++){
sum = sum*10+flag*(str[i]-'0');
}
return sum;
}
};