描述
Validate if a given string is numeric.
Some examples:"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
分析
該題的說明比較模糊,所以需要慢慢進行嘗試來弄清楚哪些是合法的數字。整理了以下規則:
- 符號只能出現在最前面或者字元
e
後面一位 - ` . `只能
e
的前面,且只能有一個小數點 -
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