這道LeetCode題究竟有什麼坑點,讓它的反對是點贊的9倍?

本文始發於個人公眾號:TechFlow,原創不易,求個關注

今天是LeetCode專題的第38篇文章,我們一起來看看第65題,Valid Number。

曾經我們聊到過演算法當中的一個類別——模擬題。所謂的模擬題就是題面非常簡單,也不涉及任何複雜的演算法,但是要實現的功能比較麻煩,非常考驗人思維的縝密程度,很難寫出bug-free的程式碼來。今天要說的65題可以說是其中的典範,它的題面非常簡單,簡單到只有一句話,但是要實現非常麻煩,比較鍛煉人的耐心,以至於反對的人是點贊的9倍,我們一起來看看。

題面

給定一個字元串,判斷它是否是一個合法的浮點數。

從題面來看只有一句話,似乎非常簡單。但是實際上如果你仔細研究一下樣例和提示,會發現事情可能和你想的不太一樣。

樣例

"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3   " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false

提示

我們有意將問題陳述地比較模糊。在實現程式碼之前,你應當事先思考所有可能的情況。這裡給出一份可能存在於有效十進位數字中的字元列表:

數字 0-9
指數 - "e"
正/負號 - "+"/"-"
小數點 - "."
當然,在輸入中,這些字元的上下文也很重要。