leetcode 65 有效數字

2021-10-23 02:41:11 字數 2776 閱讀 4909

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

例如:

"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"

正/負號 - "+"/"-"

小數點 - "."

當然,在輸入中,這些字元的上下文也很重要。

判斷是否為十進位制數字,主要對非數字的字元看以下幾點:

小數點:有且只有1個,但不能只有它

正負號:沒e時,有且只有1個,並且只能出現在開頭,有e時,e後面的字串重新開始判斷,但是不能有小數點。均不能只有它

字母:有且只能為e,e出現後後面的數字中不能有小數點

總體來說,把輸入的字串分為e之前和e之後2段,2段的區別在於:e之前可以有小數點,e之後不能有小數點。後期的錯誤主要在於小數點和正負號不能脫離數字而存在,所以加乙個對符號個數及輸入字串長度的判斷即可。

時間》70.00%

空間》7.14%

class

solution

:def

isnumber

(self, s:

str)

->

bool

:def

judger

(number:

str, max_dot_count:

int, pass_elements:

set)

->

bool

: number_list =

list

(number)

ifnot number_list:

return

false

item_count =

punc_count =

0for item in number_list:

item_count[item]

= item_count.get(item,0)

+1if item in

['-'

,'+'

,'.']:

punc_count +=

1# punctuation

if punc_count ==

len(number_list)

:return

false

# elements

elements =

set(item_count.keys())

union_set = elements | pass_elements

iflen(union_set)

>

len(pass_elements)

:return

false

# dot

dot_count = item_count.get(

'.',0)

if dot_count > max_dot_count:

return

false

# +/-

add_count = item_count.get(

'+',0)

minis_count = item_count.get(

'-',0)

if add_count + minis_count >1:

return

false

if add_count and number_list.index(

'+')!=0

:return

false

if minis_count and number_list.index(

'-')!=0

:return

false

return

true

number_str = s.strip(

) pass_elements =

set(

['+'

,'-'

,'.'

,'e'])

for i in

range(0

,10):

pass_elements.add(

str(i))if

'e'in number_str:

eparts = number_str.split(

'e')

iflen

(eparts)

>2:

return

false

return judger(eparts[0]

,1, pass_elements)

& judger(eparts[1]

,0, pass_elements)

else

:return judger(number_str,

1, pass_elements)

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