leetcode 65 有效數字

2021-10-01 22:47:24 字數 1722 閱讀 9511

驗證給定的字串是否可以解釋為十進位制數字。

例如:「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 設定幾個布林值...