0%

LeetCode.有效数字

验证给定的字符串是否可以解释为十进制数字。

  • 例如:
    “0” => true
    “ 0.1 “ => true
    “abc” => false
    “1 a” => false
    “2e10” => true
    “ -90e3   “ => true
    “ 1e” => false
    “e3” => false
    “ 6e-1” => true
    “ 99e2.5 “ => false
    “53.5e93” => true
    “ –6 “ => false
    “-+3” => false
    “95a54e53” => false
  • 说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。这里给出一份可能存在于有效十进制数字中的字符列表:
  1. 数字 0-9
  2. 指数 - “e”
  3. 正/负号 - “+”/“-“
  4. 小数点 - “.”
  5. 解法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    object IsNumber {

    def main(args: Array[String]): Unit = {
    println(isNumber(".")) //false
    println(isNumber("0")) //true
    println(isNumber(" 0.1 ")) //true
    println(isNumber("abc")) //false
    println(isNumber("1 a")) //false
    println(isNumber("2e10")) //true
    println(isNumber(" -90e3   ")) //true
    println(isNumber(" 1e")) //false
    println(isNumber("e3")) //false
    println(isNumber(" 6e-1")) //true
    println(isNumber(" 99e2.5 ")) //false
    println(isNumber("53.5e93")) //true
    println(isNumber(" --6 ")) //false
    println(isNumber("-+3")) //false
    println(isNumber("95a54e53")) //false

    }

    def isNumber(s: String): Boolean = {
    if (s == null || s.length() == 0) return false
    var numSeen = false
    var dotSeen = false
    var eSeen = false
    val arr = s.trim().toCharArray()
    for (i <- 0 until arr.length) {
    if (arr(i) >= '0' && arr(i) <= '9') {
    numSeen = true
    } else if (arr(i) == '.') {
    if (dotSeen || eSeen) {
    return false
    }
    dotSeen = true
    } else if (arr(i) == 'E' || arr(i) == 'e') {
    if (eSeen || !numSeen) {
    return false
    }
    eSeen = true
    numSeen = false
    } else if (arr(i) == '+' || arr(i) == '-') {
    if (i != 0 && arr(i - 1) != 'e' && arr(i - 1) != 'E') {
    return false
    }
    } else {
    return false
    }
    }
    numSeen
    }
    }