65. 有效數(shù)字

【題目】

有效數(shù)字(按順序)可以分成以下幾個(gè)部分:

  1. 一個(gè) 小數(shù) 或者 整數(shù)
  2. (可選)一個(gè) 'e''E' ,后面跟著一個(gè) 整數(shù)

小數(shù)(按順序)可以分成以下幾個(gè)部分:

  1. (可選)一個(gè)符號(hào)字符('+''-'

  2. 下述格式之一:

    1. 至少一位數(shù)字,后面跟著一個(gè)點(diǎn) '.'
    2. 至少一位數(shù)字,后面跟著一個(gè)點(diǎn) '.' ,后面再跟著至少一位數(shù)字
    3. 一個(gè)點(diǎn) '.' ,后面跟著至少一位數(shù)字

整數(shù)(按順序)可以分成以下幾個(gè)部分:

  1. (可選)一個(gè)符號(hào)字符('+''-'
  2. 至少一位數(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ù)法。

算法步驟:

  1. 定義正則表達(dá)式規(guī)則:構(gòu)造一個(gè)正則表達(dá)式來匹配可能出現(xiàn)的所有有效數(shù)字格式。
  2. 使用正則表達(dá)式匹配字符串:利用Python的re模塊,使用定義好的正則表達(dá)式來檢查輸入字符串是否匹配。
  3. 返回匹配結(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ù)性之間找到平衡。

題目鏈接

有效數(shù)字

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 65. 有效數(shù)字 跟這個(gè)是一個(gè)題劍指 Offer 20. 表示數(shù)值的字符串 《編譯原理》里的dfa,不會(huì)的話建議學(xué)...
    來到了沒有知識(shí)的荒原閱讀 168評(píng)論 0 0
  • 65. 有效數(shù)字 方法一:作弊,看下代碼細(xì)節(jié)try的使用方法: 代碼:注意下面是float()這個(gè)函數(shù)將字符串轉(zhuǎn)換...
    貓皮虎大人閱讀 191評(píng)論 0 1
  • 解題思路 代碼比較長,但是很簡單「設(shè)計(jì)模式」中的訪問者模式使用一個(gè)類管理匹配,檢查匹配狀態(tài)即可 65. 有效數(shù)字[...
    深圳都這么冷閱讀 273評(píng)論 0 0
  • 題目描述(困難難度) 給定一個(gè)字符串,判斷它是否代表合法數(shù)字,當(dāng)然題目描述的樣例不夠多,會(huì)使得設(shè)計(jì)算法中出現(xiàn)很多遺...
    windliang閱讀 231評(píng)論 0 0
  • 前言 我們社區(qū)陸續(xù)會(huì)將顧毅(Netflix 增長黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。)的 Swi...
    Swift社區(qū)閱讀 430評(píng)論 0 6

友情鏈接更多精彩內(nèi)容