2.**總結
請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100"、「5e2」、"-123"、「3.1416」、"-1e-16"、「0123"都表示數值,但"12e」、「1a3.14」、「1.2.3」、"±5"及"12e+5.4"都不是。
本題使用有限狀態自動機。根據字元型別和合法數值的特點,先定義狀態,再畫出狀態轉移圖,最後編寫**即可。
空格 「 」、數字「 0—90—9 」 、正負號 「 ++, -− 」 、小數點 「 … 」 、冪符號 「 ee, ee 」 。
按照字串從左到右的順序,定義以下 9 種狀態。
開始的空格
冪符號前的正負號
小數點前的數字
小數點、小數點後的數字
當小數點前為空格時,小數點、小數點後的數字
冪符號冪符號後的正負號
冪符號後的數字
結尾的空格
結束狀態:
合法的結束狀態有 2, 3, 7, 8 。
初始化:
狀態轉移表 states : 設 states[i] ,其中 i 為所處狀態, states[i] 使用雜湊表儲存可轉移至的狀態。鍵值對 (key, value) 含義:輸入字元 key ,則從狀態 i 轉移至狀態 value 。
當前狀態 p : 起始狀態初始化為 p = 0 。
狀態轉移迴圈: 遍歷字串 s 的每個字元 c 。
記錄字元型別 t : 分為四種情況。
當 c 為正負號時,執行 t = 『s』 ;
當 c 為數字時,執行 t = 『d』 ;
當 c 為 e 或 e 時,執行 t = 『e』 ;
當 c 為 . 或 空格 時,執行 t = c (即用字元本身表示字元型別);
否則,執行 t = 『?』 ,代表為不屬於判斷範圍的非法字元,後續直接返回 falsefalse 。
終止條件: 若字元型別 t 不在雜湊表 states[p] 中,說明無法轉移至下一狀態,因此直接返回 falsefalse 。
狀態轉移: 狀態 p 轉移至 states[p][t] 。
返回值: 跳出迴圈後,若狀態 p \in ∈2,3,7,8 ,說明結尾合法,返回 truetrue ,否則返回 falsefalse 。
複雜度分析:
時間複雜度 o(n)o(n) : 其中 nn 為字串 s 的長度,判斷需遍歷字串,每輪狀態轉移的使用 o(1)o(1) 時間。
空間複雜度 o(1)o(1) : states 和 p 使用常數大小的額外空間。
**如下(示例):
class
solution
: def isnumber
(self, s: str)
->
bool
: states =
[, # 0. start with 'blank'
, # 1.
'sign' before 'e'
, # 2.
'digit' before 'dot'
, # 3.
'digit' after 'dot'
, # 4.
'digit' after 'dot'
(『blank』 before 'dot'
), # 5.
'e', # 6.
'sign' after 'e'
, # 7.
'digit' after 'e'
# 8. end with 'blank'
] p =
0 # start with state 0
for c in s:
if'0'
<= c <=
'9': t =
'd' # digit
elif c in "+-"
: t =
's' # sign
elif c in "ee"
: t =
'e' # e or e
elif c in ". "
: t = c # dot, blank
else
: t =
'?' # unknown
if t not in states[p]
:return false
p = states[p]
[t]return p in (2,
3,7,
8)5dkal2/
劍指Offer 20 表示數值的字串
請實現乙個函式來判斷字串是否表示數值 包括整數和小數 例 字串 100 5e2 123 3.1416 1e 16 都表示數值,但 12e 1a3.14 1.2.3 5 12e 5.4 都不是。時間複雜度 o n 空間複雜度 o 1 def numeric strings s param s num ...
劍指Offer20 表示數值的字串
題目 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。考察的是 模式匹配的策略 的完整性 我們首先分析一下子可能是數值的字串的格式 在數值之前...
劍指offer 20 表示數值的字串
請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如 字串 100 5e2 123 3.1416 和 1e 16 都表示數值 但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是 使用指標的指標 a.b e e c 對a b c 的判斷 class solution if ...