这道题可以使用.
或者e/E
将数字分为两段,每一段数字都有不同的特征,可以使用函数的参数来控制这些特征以判断是否为数字。这种方法只用扫描一遍数组,时间复杂度为 O(n)。
不过测试用例有些奇怪,-.456
居然被认为是一个合法的数字,所以只能将判断正负号后在判断下一个字符是否是数字的代码去掉,才能通过。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { public: bool isNumeric(char* string) { return isNumeric(string,true,true,true);
} bool isNumeric(char* string,bool canNegative,bool canDecimal, bool canExp){ if(string==NULL || string[0]=='\0') return false; if(*string=='+' || *string=='-'){ if(canNegative) string++; else return false; } while(*string!='\0'){ if(*string=='.'){ if(canDecimal) return isNumeric(++string,false,false,true); else return false; }else if(*string=='e' || *string=='E'){ if(canExp) return isNumeric(++string,true,false,false); else return false; } else if(!isNumber(*string)){ return false; } string++; } return true; } bool isNumber(char ch){ if(ch>='0' && ch<='9') return true; return false; }
};
|