請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+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...