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.
Update (2015-02-10):
The signature of the C++
function had been updated. If you still see your function signature accepts aconst char *
argument, please click the reload buttonto reset your code definition.
class Solution: def getType(self, ch): if '^' == ch: return 0 elif ' ' == ch: return 1 elif '+' == ch or '-' == ch: return 2 elif ch >= '0' and ch <= '9': return 3 elif '.' == ch: return 4 elif 'e' == ch: return 5 elif '$' == ch: return 6 else: return 7 def getMap(self): map = ( (0, 0, 1, 4, 2, -1, -1, -1), # 0: ^ / space (-1, -1, -1, 4, 2, -1, -1, -1), # 1: + / - (-1, -1, -1, 3, -1, -1, -1, -1), # 2: . (-1, 10, -1, 3, -1, 7, 11, -1), # 3: num (-1, 10, -1, 4, 5, 7, 11, -1), # 4: num (-1, 10, -1, 6, -1, 7, 11, -1), # 5: . (-1, 10, -1, 6, -1, 7, 11, -1), # 6: num (-1, -1, 8, 9, -1, -1, -1, -1), # 7: e (-1, -1, -1, 9, -1, -1, -1, -1), # 8: + / 1 (-1, 10, -1, 9, -1, -1, 11, -1), # 9: num (-1, 10, -1, -1, -1, -1, 11, -1) # 10: space ) return map # @param s, a string # @return a boolean def isNumber(self, s): map = self.getMap() state = 0 after_s = "^" + s + "$" for ch in after_s: type = self.getType(ch) state = map[state][type] if -1 == state: break return 11 == state