Leetcode: 65. Valid Number
Problem Statement: Give a string, return if it is a valid number given parsing rules.
Brute Force
This is a problem to test if you are capable of implementing a program with complex rules. There is no big challenge besides carefully implementing the rules.
def solve(s): def is_digit(d): return d >= "0" and d <= "9" def is_signal(s): return s == "+" or s == "-" def all_digits(s): if len(s) == 0: return False for d in s: if not is_digit(d): return False return True def is_integer(s): if len(s) == 0: return False return (is_signal(s[0]) and all_digits(s[1:])) or all_digits(s) def is_decimal(s): if len(s) == 0 or "." not in s: return False if is_signal(s[0]): s = s[1:] parts = s.split(".") if len(parts) != 2: return False if len(parts[0]) == 0: return all_digits(parts[1]) return all_digits(parts[0]) and (len(parts[1]) == 0 or all_digits(parts[1])) s = s.lower() if "e" in s: parts = s.split("e") if len(parts) != 2: return False return (is_decimal(parts[0]) or is_integer(parts[0])) and is_integer(parts[1]) return is_decimal(s) or is_integer(s) assert solve("2") assert solve("0089") assert solve("-0.1") assert solve("+3.14") assert solve("4.") assert solve("-.9") assert solve("2e10") assert solve("-90E3") assert solve("3e+7") assert solve("+6e-1") assert solve("53.5e93") assert solve("-123.456e789") assert not solve("abc") assert not solve("1a") assert not solve("1e") assert not solve("e3") assert not solve("99e2.5") assert not solve("--6") assert not solve("-+3") assert not solve("95a54e53") assert not solve("0..") class Solution: def isNumber(self, s: str) -> bool: # regular expression: ^([+-]?\d+|[+-]?(\d+[.]|\d+[.]\d+|[.]\d+))([eE][+-]?\d+)?$ return solve(s)