【題目】
有效數字(按順序)可以分成以下幾個部分:
- 一個 小數 或者 整數
- (可選)一個
'e'或'E',后面跟著一個 整數
小數(按順序)可以分成以下幾個部分:
(可選)一個符號字符(
'+'或'-')-
下述格式之一:
- 至少一位數字,后面跟著一個點
'.' - 至少一位數字,后面跟著一個點
'.',后面再跟著至少一位數字 - 一個點
'.',后面跟著至少一位數字
- 至少一位數字,后面跟著一個點
整數(按順序)可以分成以下幾個部分:
- (可選)一個符號字符(
'+'或'-') - 至少一位數字
部分有效數字列舉如下:["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分無效數字列舉如下:["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
給你一個字符串 s ,如果 s 是一個 有效數字 ,請返回 true 。
示例 1:
輸入: s = "0"
輸出: true
示例 2:
輸入: s = "e"
輸出: false
示例 3:
輸入: s = "."
輸出: false
提示:
1 <= s.length <= 20-
s僅含英文字母(大寫和小寫),數字(0-9),加號'+',減號'-',或者點'.'。
【題目解析】
解題方法
使用正則表達式
為了精確地匹配所有有效數字的格式,我們采用正則表達式方法。正則表達式是一種強大的文本匹配工具,能夠通過定義一系列的規(guī)則來識別復雜的文本模式。對于本題,我們設計一個正則表達式來匹配合法的數字格式,包括整數、小數和科學記數法。
算法步驟:
- 定義正則表達式規(guī)則:構造一個正則表達式來匹配可能出現的所有有效數字格式。
-
使用正則表達式匹配字符串:利用Python的
re模塊,使用定義好的正則表達式來檢查輸入字符串是否匹配。 -
返回匹配結果:如果字符串與正則表達式匹配,返回
True表示字符串是一個有效數字;否則,返回False。
class Solution:
def isNumber(self, s: str) -> bool:
# 定義正則表達式匹配有效數字
pattern = r'^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$'
return re.match(pattern, s) is not None
執(zhí)行效率

image.png
【總結】
適用問題類型:
這種方法特別適用于需要精確定義輸入格式并驗證輸入是否符合特定格式的問題,如驗證郵箱地址、電話號碼、身份證號碼等,以及本例中的有效數字。
解決算法: 正則表達式
-
算法特點:
- 靈活性: 正則表達式能夠靈活定義各種文本模式,適應復雜的文本格式要求。
- 強大的匹配能力: 能夠在復雜的文本中快速識別和提取信息。
- 簡潔性: 相較于傳統(tǒng)的字符串處理方法,正則表達式提供了更為簡潔和直觀的解決方案。
-
時間復雜度與空間復雜度:
- 時間復雜度: 主要取決于正則表達式的復雜度和輸入字符串的長度,一般為O(n),其中n為字符串長度。
- 空間復雜度: 由于正則匹配過程中需要存儲狀態(tài)信息,其空間復雜度也取決于正則表達式的復雜度和輸入字符串的長度,但通常可以認為是O(1)或O(n)。
-
實踐意義:
- 正則表達式提供了一種高效、靈活的方式來處理和驗證格式化文本。在軟件開發(fā)中,正確地使用正則表達式可以大大減少代碼量,提高開發(fā)效率和代碼的可維護性。
- 在處理用戶輸入驗證、日志分析、文本數據清洗等多種場景下,正則表達式都是一個強有力的工具。
- 然而,正則表達式也存在一定的學習曲線,對于復雜的表達式,閱讀和維護可能會比較困難,因此需要在復雜度和可維護性之間找到平衡。