LeetCode 65. Valid Number
原题链接在这里: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 boolean eSeen = false; 8 boolean dotSeen = false; 9 boolean digitSeen = false; 10 s = s.trim().toLowerCase(); 11 for(int i = 0; i < s.length(); i++){ 12 char c = s.charAt(i); 13 if(c == '+' || c == '-'){ 14 if(i != 0 && s.charAt(i - 1) != 'e'){ 15 return false; 16 } 17 }else if(Character.isDigit(c)){ 18 digitSeen = true; 19 }else if(c == '.'){ 20 if(dotSeen || eSeen){ 21 return false; 22 } 23 24 dotSeen = true; 25 }else if(c == 'e'){ 26 if(eSeen || !digitSeen){ 27 return false; 28 } 29 30 eSeen = true; 31 digitSeen = false; 32 }else{ 33 return false; 34 } 35 } 36 37 return digitSeen; 38 } 39 }
浙公网安备 33010602011771号