本文共 3182 字,大约阅读时间需要 10 分钟。
class Solution {//finite state machine//status 1 => 小数点前面的部分//status 2 => 小数点后到'e'前面的部分//status 3 => e后面的科学计数法部分//should practice couple times morepublic: bool isNumber(const char *s) { // Start typing your C/C++ solution below // DO NOT write int main() function bool bIntNum = false; int nCurState = 1; while (true) { if (nCurState == 1) { while (*s == ' ') s++; if (*s == '+' || *s == '-') s++; if (*s >= '0' && *s <= '9') { while (*s >= '0' && *s <= '9') s++; bIntNum = true; } if (*s == '.' /*&& bIntNum*/) //.34 true { nCurState = 2; s++; continue; } else if (*s == 'e' && bIntNum)//go to state 3, there must have bIntNum before { nCurState = 3; s++; continue; } while (*s == ' ') s++; return (bIntNum && *s == 0); } else if (nCurState == 2)//1. true { //bIntNum = false; if (*s >= '0' && *s <= '9') { while (*s >= '0' && *s <= '9') s++; bIntNum = true; } if (*s == 'e' && bIntNum)//go to state 3, there must have bIntNum before { nCurState = 3; s++; continue; } while (*s == ' ') s++; return (bIntNum && *s == 0);//if there is no e, then there must have bIntNum, such as ".23" or "1." } else//nCurState 3 need judge if there is bIntNum again, because "1e" is illegal { bIntNum = false; if (*s == '+' || *s == '-') s++; if (*s >= '0' && *s <= '9') { while (*s >= '0' && *s <= '9') s++; bIntNum = true; } while (*s == ' ') s++; return (*s == 0 && bIntNum); } } }};
second time
class Solution {//finite automatapublic: vector> transTable; int inputType(char a) { if(a == ' ') return 0; else if(a == '+' || a == '-') return 1; else if(a >= '0' && a <= '9') return 2; else if(a == '.') return 3; else if(a == 'e') return 4; else return 5;//illegal input } void initTransTable() { transTable.resize(9, vector (5, -1)); transTable[0][0] = 0; transTable[0][1] = 1; transTable[0][2] = 2; transTable[0][3] = 7; transTable[7][2] = 3; transTable[1][2] = 2; transTable[1][3] = 7; transTable[2][2] = 2; transTable[2][0] = 6; transTable[2][3] = 3; transTable[2][4] = 4; transTable[3][2] = 3; transTable[3][4] = 4; transTable[3][0] = 6; transTable[4][1] = 8; transTable[8][2] = 5; transTable[4][2] = 5; transTable[5][2] = 5; transTable[5][0] = 6; transTable[6][0] = 6; } bool isNumber(const char *s) { // Start typing your C/C++ solution below // DO NOT write int main() function if(s == NULL) return false; initTransTable(); int curState = 0; while(*s != '\0') { int curInput = inputType(*s); if(curInput == 5) return false; curState = transTable[curState][curInput]; if(curState == -1) return false; s++; } if(curState == 2 || curState == 3 || curState == 5 || curState == 6) return true; else return false; }};
转载地址:http://shxti.baihongyu.com/