20題 表示數值的字串

2021-10-16 18:54:11 字數 1505 閱讀 3499

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100"、「5e2」、"-123"、「3.1416」、"-1e-16"、「0123"都表示數值,但"12e」、「1a3.14」、「1.2.3」、"±5"及"12e+5.4"都不是。

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

字元型別:

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

狀態定義:

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

開始的空格

冪符號前的正負號

小數點前的數字

小數點、小數點後的數字

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

冪符號冪符號後的正負號

冪符號後的數字

結尾的空格

結束狀態:

合法的結束狀態有 2, 3, 7, 8 。

演算法流程:

狀態轉移迴圈:遍歷字串s的每個字元c。

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

返回值:跳出迴圈後,若狀態p∈2

,3,7

,8p \in 2,3,7,8

p∈2,3,

7,8,說明結尾合法,返回true,否則返回false。

class

solution},

// 0.

newhashmap

<

>()

},// 1.

newhashmap

<

>()

},// 2.

newhashmap

<

>()

},// 3.

newhashmap

<

>()

},// 4.

newhashmap

<

>()

},// 5.

newhashmap

<

>()

},// 6.

newhashmap

<

>()

},// 7.

newhashmap

<

>()

}// 8.};

int p =0;

char t;

for(

char c : s.

tochararray()

)return p ==

2|| p ==

3|| p ==

7|| p ==8;

}}

複雜度分析:

第20題 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。測試用例 test test1 100 true test test2 123.45e 6 t...

20 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 0123 都表示數值,但 12e 1a3.14 1.2.3 5 1e 16 及 12e 5.4 都不是。def isnumber self,s str bool s s.strip met do...

ATO 20 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。本題能正確的ac還是有一定難度的,具體解法還是參見 劍指offer 把。class solut...