LeetCode 8 - 文字列整数変換

タイトル説明

8.文字列変換整数(ATOI)

溶液A:オートマトン(C ++)

ここに画像を挿入説明
参照して詳細文字列変換整数(ATOI)

class Automation{
    string state ="start";
    unordered_map<string, vector<string>> table = {{"start", {"start", "signed", "in_number", "end"}}, {"signed", {"end", "end", "in_number", "end"}}, {"in_number", {"end", "end", "in_number", "end"}},{"end", {"end", "end", "end", "end"}}};

    int get_col(char c){
        if(isspace(c)) return 0;
        if(c=='+' or c=='-') return 1;
        if(isdigit(c)) return 2;
        return 3;
    }

public:
    int sign = 1;
    long long ans = 0;

    void get(char c){
        state = table[state][get_col(c)];
        if(state=="in_number"){
            ans = ans*10+c-'0';
            ans = sign==1?min(ans, (long long)INT_MAX):min(ans, -(long long)INT_MIN);
        }
        else if(state=="signed")
            sign = c=='+'?1:-1;
    }
};


class Solution {
public:
    int myAtoi(string str) {
        Automation automation;
        for(char c: str)
            automation.get(c);
        return automation.sign*automation.ans;
    }
};

対処方法2:データ・ストリーム(C ++)

class Solution {
public:
    int myAtoi(string str) {
        long long  num = 0;
        istringstream str_1(str);
        str_1 >> num;
        if(num>INT_MAX)
            return INT_MAX;
        else if(num<INT_MIN)
            return INT_MIN;
        else return num;
    }
};

解決策3:定期的(パイソン)

class Solution:
    def myAtoi(self, str: str) -> int:
        INT_MAX = 2147483647 
        INT_MIN = -2147483648
        str = str.lstrip()
        num_re = re.compile(r'^[\+\-]?\d+')
        num = num_re.findall(str)
        num = int(*num) # 由于返回的是个列表,解包并且转换成整数
        return max(min(num, INT_MAX), INT_MIN)

公開された152元の記事 ウォン称賛22 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_38204302/article/details/105300956