【LeetCode】字符串转换整数 (atoi)(自动机)

https://leetcode-cn.com/problems/string-to-integer-atoi/

class Automat{
  int Auto=0;
  //0 空格
  //1 +/-
  //2 数字
  //3 其他
  unordered_map<int,vector<int>> table={
    {0,{0,1,2,3}},
    {1,{3,3,2,3}},
    {2,{3,3,2,3}},
    {3,{3,3,3,3}}    
  };
  int get_type(char c){
    if(c == ' ') return 0;
    if(c == '+' || c == '-') return 1;
    if(c-'0'>=0 && c - '0' <=9) return 2;
    return 3;
  }
public:
  int sign =1;
  long long ans=0;
  void get(char c){
    Auto=table[Auto][get_type(c)];
    if(Auto == 2){
      ans=ans*10 + c - '0';
      ans = sign == 1 ? min(ans,(long long)INT_MAX) : min(ans,-(long long)INT_MIN);
    }else if(Auto == 1){
      sign = c == '+' ? 1 : -1;
    }
  }
};

class Solution {
public:
    int myAtoi(string s) {
        Automat automaton;
            for (char c : s)
                automaton.get(c);
        return automaton.sign * automaton.ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值