65. 有效數字

【題目】

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

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

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

  1. (可選)一個符號字符('+''-'

  2. 下述格式之一:

    1. 至少一位數字,后面跟著一個點 '.'
    2. 至少一位數字,后面跟著一個點 '.' ,后面再跟著至少一位數字
    3. 一個點 '.' ,后面跟著至少一位數字

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

  1. (可選)一個符號字符('+''-'
  2. 至少一位數字

部分有效數字列舉如下:["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ī)則來識別復雜的文本模式。對于本題,我們設計一個正則表達式來匹配合法的數字格式,包括整數、小數和科學記數法。

算法步驟:

  1. 定義正則表達式規(guī)則:構造一個正則表達式來匹配可能出現的所有有效數字格式。
  2. 使用正則表達式匹配字符串:利用Python的re模塊,使用定義好的正則表達式來檢查輸入字符串是否匹配。
  3. 返回匹配結果:如果字符串與正則表達式匹配,返回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ā)效率和代碼的可維護性。
    • 在處理用戶輸入驗證、日志分析、文本數據清洗等多種場景下,正則表達式都是一個強有力的工具。
    • 然而,正則表達式也存在一定的學習曲線,對于復雜的表達式,閱讀和維護可能會比較困難,因此需要在復雜度和可維護性之間找到平衡。

題目鏈接

有效數字

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

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容