【Leetcode】【Hard】Valid Number
Validate if a given string is numeric.
Some examples:"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
本题需要考虑:
1、字符前的空格
2、字符正负号
3、检查是否是数字,数字中可以包含一个‘.’小数点,数字至少应存在一位
4、略过数字和点后,检查是否有‘e’,如果有:
(1)检查指数是否有正负
(2)检查其后是否有数字,数字至少存在一位
5、字符后的空格
6、最后遇到'\0'则返回true,否则false
代码:
1 class Solution { 2 public: 3 bool isNumber(string s) { 4 int i = 0; 5 6 // skip the whilespaces 7 for(; s[i] == ' '; i++) {} 8 9 // check the significand 10 if(s[i] == '+' || s[i] == '-') i++; // skip the sign if exist 11 12 int n_nm, n_pt; 13 for(n_nm=0, n_pt=0; (s[i]<='9' && s[i]>='0') || s[i]=='.'; i++) 14 s[i] == '.' ? n_pt++:n_nm++; 15 if(n_pt>1 || n_nm<1) // no more than one point, at least one digit 16 return false; 17 18 // check the exponent if exist 19 if(s[i] == 'e') { 20 i++; 21 if(s[i] == '+' || s[i] == '-') i++; // skip the sign 22 23 int n_nm = 0; 24 for(; s[i]>='0' && s[i]<='9'; i++, n_nm++) {} 25 if(n_nm<1) 26 return false; 27 } 28 29 // skip the trailing whitespaces 30 for(; s[i] == ' '; i++) {} 31 32 return s[i]==0; // must reach the ending 0 of the string 33 } 34 };