leetcode65 有效數字

2021-09-24 20:57:40 字數 2553 閱讀 4532

作弊法:利用try…except機制,直接判斷是否可以通過float()函式

class solution:

def isnumber(self, s: str) -> bool:

try:

float(s)

return true

except:

return false

面試的時候這麼寫基本byebye

設定幾個布林值:dot_seen = falsee_seen = falsenum_seen = false,分別代表該型別的值是否已經出現過

利用s.strip()函式將s兩邊的空格去掉,然後遍歷,根據當前元素的型別,將不是有效數字的情況列出,return false:

當前元素為數字,那麼下乙個元素是什麼型別都可以,所以只要digit_seen變為true;

當前元素為e,如果之前已經出現過e,或者沒有出現過數字,那麼不是有效數字,false;

當前元素是小數點,如果之前已經出現過小數點或者e,那麼不是有效數字,false;

當前元素是正負號,如果該元素不是首位,且前乙個元素不是e,那麼肯定不是有效數字,false。

**

class solution:

def isnumber(self, s: str) -> bool:

s = s.strip()

dot_seen = false

e_seen = false

num_seen = false

for i,a in enumerate(s):

if a.isdigit():

num_seen = true

elif a == '.':

if dot_seen or e_seen:

return false

dot_seen = true

elif a == 'e':

if e_seen or not num_seen:

return false

e_seen = true

num_seen = false #因為e之後必須再次判斷是否出現數字,所以這裡要把num_seen置為false

elif a in '+-':

if i > 0 and s[i-1] != 'e':

return false

else:

return false

return num_seen

有限自動機法我理解了一下,就是判斷狀態是否可以轉移,最終是否能轉移到合格的狀態上,如圖:

畫出狀態轉移表,結構為states[n]儲存n個狀態;

states[i]為乙個hashtable,表示從此狀態允許跳轉到的狀態;

主迴圈中遍歷字串,通過狀態轉移表判斷結構是否成立:

若中途遇到無法跳轉的狀態,直接返回false;

若成功遍歷完字串,要判斷結束狀態是否在允許的結束狀態內,本題為[3, 5, 8, 9]。

**

class solution:

def isnumber(self, s: str) -> bool:

state = [

{},# 狀態1,初始狀態(掃瞄通過的空格)

,# 狀態2,發現符號位(後面跟數字或者小數點)

,# 狀態3,數字(一直迴圈到非數字)

,# 狀態4,小數點(後面只有緊接數字)

,# 狀態5,小數點之後(後面只能為數字,e,或者以空格結束)

,# 狀態6,發現e(後面只能符號位, 和數字)

,# 狀態7,e之後(只能為數字)

,# 狀態8,e之後的數字後面(只能為數字或者以空格結束)

,# 狀態9, 終止狀態 (如果發現非空,就失敗)

]cur_state = 1

for i in s:

if i.isdigit():

i = 'num'

elif i == '.':

i = 'dot'

elif i in '+-':

i = 'sign'

elif i == ' ':

i = 'blank'

elif i == 'e':

i = 'e'

if i not in state[cur_state]:

return false

cur_state = state[cur_state][i]

return cur_state in [3,5,8,9]

知乎上,九四幹的leetcode刷題專欄

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 有效數字

驗證給定的字串是否可以解釋為十進位制數字。例如 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 ...