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

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