LeetCode in Kotlin

65. Valid Number

Hard

A valid number can be split up into these components (in order):

  1. A decimal number or an integer.
  2. (Optional) An 'e' or 'E', followed by an integer.

A decimal number can be split up into these components (in order):

  1. (Optional) A sign character (either '+' or '-').
  2. One of the following formats:
    1. One or more digits, followed by a dot '.'.
    2. One or more digits, followed by a dot '.', followed by one or more digits.
    3. A dot '.', followed by one or more digits.

An integer can be split up into these components (in order):

  1. (Optional) A sign character (either '+' or '-').
  2. 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.

Example 1:

Input: s = “0”

Output: true

Example 2:

Input: s = “e”

Output: false

Example 3:

Input: s = “.”

Output: false

Constraints:

Solution

class Solution {
    fun isNumber(s: String): Boolean {
        if (s.isEmpty()) {
            return false
        }
        var eSeen = false
        var numberSeen = false
        var decimalSeen = false
        for (i in 0 until s.length) {
            val c = s[i]
            if (c.code >= 48 && c.code <= 57) {
                numberSeen = true
            } else if (c == '+' || c == '-') {
                if (i == s.length - 1 ||
                    i != 0 && s[i - 1] != 'e' && s[i - 1] != 'E'
                ) {
                    return false
                }
            } else if (c == '.') {
                if (eSeen || decimalSeen) {
                    return false
                }
                decimalSeen = true
            } else if (c == 'e' || c == 'E') {
                if (i == s.length - 1 || eSeen || !numberSeen) {
                    return false
                }
                eSeen = true
            } else {
                return false
            }
        }
        return numberSeen
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy