1. 程式人生 > >LeetCode-8. 字串轉換整數 (atoi)

LeetCode-8. 字串轉換整數 (atoi)

題目地址: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;
    }
};