剑指 Offer 20. 表示数值的字符串

题目

剑指 Offer 20. 表示数值的字符串

我的思路

有限状态自动机

我的实现

class Solution {
public:
    int getInput(char c)
    {
        if(c==' ')return 0;
        else if(c-'0'>=0&&c-'0'<=9)return 1;
        else if(c=='+'||c=='-')return 2;
        else if(c=='e')return 3;
        else if(c=='.')return 4;
        else return 5;
    }
    bool isNumber(string s) {
    int state = 0;
    int input;
    int pos = 0;
    int length = s.size();
    while(pos<length)
    {
        input = getInput(s[pos]);
        switch (state)
        {
            case 0:
                if(input==0){state=0;}
                else if(input==1){state = 2;}
                else if(input==2){state = 1;}
                else if(input==4){state = 9;}
                else{return false;}
            break;
            case 1:
                if(input==1){state=2;}
                else if(input==4){state=9;}
                else{return false;}
            break;
            case 2:
                if(input==1){state=2;}
                else if(input==3){state=5;}
                else if(input==4){state=3;}
                else if(input==0){state=8;}
                else{return false;}
            break;
            case 3:
                if(input==1){state=4;}
                else if(input==0){state=8;}
                else if(input==3){state=5;}
                else{return false;}
            break;
            case 4:
                if(input==0){state=8;}
                else if(input==3){state=5;}
                else if(input==1){state=4;}
                else{return false;}
            break;
            case 5:
                if(input==2){state=6;}
                else if(input==1){state=7;}
                else {return false;}
            break;
            case 6:
                if(input==1){state=7;}
                else{return false;}
            break;
            case 7:
                if(input==1){state=7;}
                else if(input==0){state=8;}
                else {return false;}
            break;
            case 8:
                if(input==0){state=8;}
                else {return false;}
            break;
            case 9:
                if(input==1){state=4;}
                else{return false;}
            default:
            break;
        }
        ++pos;
    }
    if(state==2||state==3||state==4||state==7||state==8)
    return true;
    else return false;



    }
};
/*
状态转移?


*/

拓展学习

原文地址:https://www.cnblogs.com/BoysCryToo/p/13453390.html