驗證給定的字串是否可以解釋為十進位制數字。
例如:
"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 設定幾個布林值...