LeetCode-8. 字串轉換整數 (atoi)
阿新 • • 發佈:2018-12-08
題目地址: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; } };