C++/代码/追溯法/各个情况:
1.小数可以没有整数部分,例如.123等于0.123;
2.小数点后面可以有数字,例如233.等于233.0;
3.小数点前面和后面可以有数字,例如233.666;
4.当e或E前面没有数字时,整个字符串不能表示数字,例如.e1、e1;
5.当e或E后面没有整数时,整个字符串不能表示数字,例如12e、12e+5.4;
6.出现2次.则错误,出现2次+-则错误,+-5错误,-1E-16正确
7.23aa错误
8.12e错误
9.12e+5.4错误
class Solution { public: int cnt1 = 0,cnt2 = 0; //cnt1是.计数器,cnt2是'+'和'-计数器' bool isNumeric(char* string) { if (*string == '\0') return true; //截止符号,停止检测,则返回true if ((*string < '0' || *string > '9') && *string != '.' && *string != '+' && *string != 'e' && *string != '-' && *string != 'E') return false; //情况7 if (*string == '.') cnt1 ++; if (*string == '+' || *string == '-') if (*(string - 1) != 'E' && *(string - 1) != 'e') cnt2 ++; if (cnt1 == 2 || cnt2 == 2) return false; //情况6 if (*string == 'e') if(*(string - 1) < '0' || *(string - 1) > '9' || *(string + 1) == '\0' || *(string + 3) == '.') return false; //情况4,情况8,情况9 if (*string == '+' || *string == '-') if(*(string - 1) > '0' && *(string - 1) < '9') return false; return isNumeric(string + 1); } };