LeetCode65. Valid Number — 判斷合法數字

lingjiu發表於2019-02-16

描述

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

分析

該題的說明比較模糊,所以需要慢慢進行嘗試來弄清楚哪些是合法的數字。整理了以下規則:

  1. 符號只能出現在最前面或者字元e後面一位
  2. ` . `只能e的前面,且只能有一個小數點
  3. e最多隻能出現一次,且前面必須有數字,後面也必須有數字

所以按照數字、小數點、e和符號這四類列出規則就可以了,記住e後面必須有數字,所以需要增加一個變數numberAftereSeen

程式碼

class Solution:
    def isNumber(self, s):
        """
        :type s: str
        :rtype: bool
        """
        # 去除前後的空格
        temp_s = s.strip()
        numberSeen = False
        pointSeen = False
        eSeen = False
        numberAftereSeen = True
        for i in range(len(temp_s)):
            if temp_s[i].isdigit():
                numberSeen = True
                numberAftereSeen = True
            elif temp_s[i] == ".":
                # 小數點前面不能出現e和小數點
                if eSeen or pointSeen:
                    return False
                pointSeen = True
            elif temp_s[i] == "e":
                # e前面不能出現e,並且需要有數字
                if eSeen or not numberSeen:
                    return False
                eSeen = True
                # 保證e後面也有數字
                numberAftereSeen = False
            elif temp_s[i] in ["+", "-"]:
                # 符號只能再0位和e後面一位
                if i != 0 and temp_s[i-1] != "e":
                    return False
            else:
                return False
        return numberSeen and numberAftereSeen

相關文章