Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Valid Number

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "65" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

Given a string s, return whether s is a valid number. 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". Formally, a valid number is defined using one of the following definitions: An integer number followed by an optional exponent. A decimal number followed by an optional exponent. An integer number is defined with an optional sign '-' or '+' followed by digits. A decimal number is defined with an optional sign '-' or '+' followed by one of the following definitions: Digits followed by a dot '.'. Digits followed by a dot '.' followed by digits. A dot '.' followed by digits. An exponent is defined with an exponent notation 'e' or 'E' followed by an integer number. The digits are defined as one or more digits. Example 1: Input: s = "0" Output: true Example 2: Input: s = "e" Output: false Example 3: Input: s = "." Output: false Constraints: 1 <= s.length <= 20 s consists of only English letters (both uppercase and lowercase), digits (0-9), plus '+', minus '-', or dot '.'.

Explanation

  • State Machine: Utilize a finite state machine approach to define the possible states and transitions based on the characters encountered in the string. This enables deterministic validation.
    • Flag Variables: Employ boolean flags to track the occurrence of digits, exponent, and decimal points to ensure adherence to the number format rules.
    • Handle Edge Cases: Address edge cases such as empty strings, leading/trailing spaces, and multiple signs or exponents to ensure robust validation.
  • Runtime Complexity: O(n), where n is the length of the input string. Storage Complexity: O(1).

Code

    class Solution:
    def isNumber(self, s: str) -> bool:
        s = s.strip()
        n = len(s)
        if not s:
            return False

        digit_seen = False
        exponent_seen = False
        decimal_seen = False

        for i, char in enumerate(s):
            if char.isdigit():
                digit_seen = True
            elif char == '+':
                if i > 0 and s[i - 1] != 'e' and s[i - 1] != 'E':
                    return False
                if i == n - 1:
                    return False
            elif char == '-':
                if i > 0 and s[i - 1] != 'e' and s[i - 1] != 'E':
                    return False
                if i == n - 1:
                    return False
            elif char == '.':
                if exponent_seen or decimal_seen:
                    return False
                decimal_seen = True
            elif char == 'e' or char == 'E':
                if exponent_seen or not digit_seen:
                    return False
                exponent_seen = True
                digit_seen = False  # Reset digit_seen for the part after 'e'
            else:
                return False

        return digit_seen

More from this blog

C

Chatmagic blog

2894 posts