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)
, wheren
is 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.