Problem
A valid number can be split up into these components (in order):
- A decimal number or an integer.
- (Optional) An
'e'or'E', followed by an integer.
A decimal number can be split up into these components (in order):
- (Optional) A sign character (either
'+'or'-'). - One of the following formats:
- One or more digits, followed by a dot
'.'. - One or more digits, followed by a dot
'.', followed by one or more digits. - A dot
'.', followed by one or more digits.
- One or more digits, followed by a dot
An integer can be split up into these components (in order):
- (Optional) A sign character (either
'+'or'-'). - One or more digits.
For example, all the following are valid numbers: ["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"], while the following are not valid numbers: ["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"].
Given a string s, return true if s is a valid number.
Examples
Example 1:
| |
Example 2:
| |
Example 3:
| |
Solution
Method 1 - Using regex
To determine if a given string is a valid number according to the defined rules, we can use a finite state machine (FSM) or regular expressions (regex) to simplify the validation process.
Approach and Reasoning
- Regex: Using a regular expression we can succinctly capture all the formatting rules defined for a valid number.
- Components:
- A regular expression will be designed to match: an optional sign, followed by digits and/or a decimal point, followed optionally by an exponent part.
- Validation:
- We’ll create a pattern that encapsulates the entirety of the valid number.
Regular Expression Components
[-+]?- Matches an optional sign.(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)- Matches a decimal number.([eE][-+]?\\d+)?- Matches the optional exponent part.
Combined Regex
[-+]?((\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?)
Code
| |
| |
Complexity
- ⏰ Time complexity:
O(n), wherenis the length of the input string. Checking a string against a regex will at most go through the length of the string. - 🧺 Space complexity:
O(1)since the regex pattern is fixed in size and does not depend on the length of the input.