题目
剑指 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; } }; /* 状态转移? */