驗證給定的字串是否可以解釋為十進位制數字。
例如:「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"
正/負號 - "+"/"-"
小數點 - "."
當然,在輸入中,這些字元的上下文也很重要。
解析:本題使用一般的方法實現起來比較繁瑣。可以使用有限狀態機dfa的思想來解決。對於每乙個狀態接收的下乙個字元,dfa 能確定唯一一條轉換路徑。遍歷一遍字串後,若最後的狀態位於給定的合法狀態,則該字串可以解釋為十進位制數字
將字串可能存在的狀態羅列,並將不同狀態之間的跳轉方式羅列,可以得到以下的狀態轉換表(滑鼠畫圖。。。)
之後根據給定的轉換表構築**即可
class
solution
break
;case
'.':
switch
(state)
break
;case
'e':
switch
(state)
break
;case
'0':
case
'1':
case
'2':
case
'3':
case
'4':
case
'5':
case
'6':
case
'7':
case
'8':
case
'9':
switch
(state)
break
;default
:return
false;}
}if(state==
3||state==
5||state==
6||state==9)
return
true
;return
false;}
//對字串進行預處理,去除首尾空格
string&
trim
(string &s)
s.erase(0
,s.find_first_not_of
(" "))
; s.
erase
(s.find_last_not_of
(" ")+
1);return s;}}
;
leetcode 65 有效數字
不知道這道題對於演算法有什麼作用,而且每個人可能理解有效的數字都不一樣,怎麼能證明考慮周到不周到呢,不斷的提交就完了 下面的是我認為肯定不合格但是卻是合格的一些代表 45.e 67 true 1 true 1.true 0123 true bool isnumber std string s if ...
leetcode65 有效數字
驗證給定的字串是否為數字。例如 0 true 0.1 true abc false 1 a false 2e10 true 說明 我們有意將問題陳述地比較模糊。在實現 之前,你應當事先思考所有可能的情況。更新於 2015 02 10 c 函式的形式已經更新了。如果你仍然看見你的函式接收 const ...
leetcode65 有效數字
作弊法 利用try except機制,直接判斷是否可以通過float 函式 class solution def isnumber self,s str bool try float s return true except return false 面試的時候這麼寫基本byebye 設定幾個布林值...