01 Feb 2025PHPHard

Valid Number

validate if string represents a valid number using state machine or regex.

use finite state machine to track parsing state. valid number can have optional sign, digits, optional decimal point, optional exponent with sign and digits.

states track: seen sign, seen digits, seen decimal, seen exponent, etc. transition between states based on current character. final state must be valid number state.

valid formats

  • integers: "123", "+123", "-123"
  • decimals: "123.45", ".45", "123."
  • scientific: "123e10", "123e-10", "123.45e10"

complexity

O(n) time to process string once. O(1) space for state tracking. efficient state machine approach.

Solution files

PHPvalid-number/solution.php
class Solution {

function isNumber($s) {
    $pattern = class="syntax-string">'/^[+-]?((\d+(\.\d*)?)|(\.\d+))([eE][+-]?\d+)?$/';
    
    return preg_match($pattern, $s) === class="syntax-number">1;
}
}

$solution = new Solution();

echo $solution->isNumber(class="syntax-string">"class="syntax-number">0") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"e") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">".") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"class="syntax-number">0.1") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"-class="syntax-number">0.1") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"class="syntax-number">3.") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"2e10") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"class="syntax-number">3.14e-class="syntax-number">10") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">" ") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"abc") ? class="syntax-string">'true' : class="syntax-string">'false';
echo $solution->isNumber(class="syntax-string">"95a54e53") ? class="syntax-string">'true' : class="syntax-string">'false';