劍指 Offer 20 表示數值的字串 C

2021-10-18 12:36:44 字數 1306 閱讀 6410

本題使用有限狀態自動機。根據字元型別和合法數值的特點,先定義狀態,再畫出狀態轉移圖,最後編寫**即可。

空格 「 」、數字「 0—9 」 、正負號 「 +− 」 、小數點 「 . 」 、冪符號 「 ee 」

按照字串從左到右的順序,定義以下 9 種狀態。

開始的空格

冪符號前的正負號

小數點前的數字

小數點、小數點後的數字

當小數點前為空格時,小數點、小數點後的數字

冪符號冪符號後的正負號

冪符號後的數字

結尾的空格

合法的結束狀態又2、3、7、8

1. 狀態轉移表 states : 設 states[i],其中 i 為所處狀態, states[i] 使用雜湊表儲存可轉移至的狀態。鍵值對 (key, value) 含義:若輸入 key ,則可從狀態 i 轉移至狀態 value 。

2. 當前狀態 p : 起始狀態初始化為 p=0 。

1.記錄字元型別 t: 分為四種情況。

當 c 為正負號時,執行 t = 's' ;

當 c 為數字時,執行 t = 'd' ;

當 c 為 e , e 時,執行 t = 'e' ;

當 c 為 . , 空格 時,執行 t = c (即用字元本身表示字元型別);

否則,執行 t = '?' ,代表為不屬於判斷範圍的非法字元,後續直接返回 false 。

2.終止條件: 若字元型別 tt 不在雜湊表 states[p]states[p] 中,說明無法轉移至下一狀態,因此直接返回 falsefalse 。

3.狀態轉移: 狀態 pp 轉移至 states[p][t]states[p][t] 。

跳出迴圈後,若狀態 p∈2,3,7,8 ,說明結尾合法,返回 true ,否則返回 false 。

時間複雜度 o(n): 其中 n 為字串 s 的長度,判斷需遍歷字串,每輪狀態轉移的使用 o(1) 時間。

空間複雜度 o(1) : states 和 p 使用常數大小的額外空間。

class solution ,,,

,,,,

,};int p = 0;

char t;

for (char c : s)

return p == 2 || p == 3 || p == 7 || p == 8;}};

劍指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 ...