原题链接在这里:https://leetcode.com/problems/valid-number/
题目:
Validate if a given string can be interpreted as a decimal number.
Some examples:"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => true" -90e3 " => true" 1e" => false"e3" => false" 6e-1" => true" 99e2.5 " => false"53.5e93" => true" --6 " => false"-+3" => false"95a54e53" => false
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:
- Numbers 0-9
- Exponent - "e"
- Positive/negative sign - "+"/"-"
- Decimal point - "."
Of course, the context of these characters also matters in the input.
Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.
题解:
用多个flag来检测. 原string trim后从e拆开,前面部分可以有dot, 后面部分不可以有dot.
Note: dot后面可能没有数字. After e, there must be digit.
Time Complexity: O(s.length()).
Space: O(1).
AC Java:
1 class Solution { 2 public boolean isNumber(String s) { 3 if(s == null || s.length() == 0){ 4 return false; 5 } 6 7 s = s.trim(); 8 9 boolean eSeen = false; 10 boolean dotSeen = false; 11 boolean digitSeen = false; 12 13 for(int i = 0; i<s.length(); i++){ 14 char c = s.charAt(i); 15 if(c == '+' || c == '-'){ 16 if(i != 0 && s.charAt(i-1) != 'e'){ 17 return false; 18 } 19 }else if(Character.isDigit(c)){ 20 digitSeen = true; 21 }else if(c == '.'){ 22 if(dotSeen || eSeen){ 23 return false; 24 } 25 26 dotSeen = true; 27 }else if(c == 'e'){ 28 if(eSeen || !digitSeen){ 29 return false; 30 } 31 32 eSeen = true; 33 digitSeen = false; 34 }else{ 35 return false; 36 } 37 } 38 39 return digitSeen; 40 } 41 }