請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示數值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1e-16"及"12e+5.4"都不是。
邏輯判斷
首先將數分為三部分:
a-整數部分-model:0
b-小數部分-model:1
c-指數部分-model:2
判斷準則:
a、c可以是有符號整數,b是無符號整數;
小數點前面或後面可以不跟數字,但是兩者不能同時發生;
指數部分前面不能沒有數字;
對於數字中間空格的判定。
class solution:
def isnumber(self, s: str) -> bool:
symbol = ['+', '-']
number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
model = 0
symbol_mark = 0
blank_mark = 0
int_length = 0
float_length = 0
e_length = 0
if s==none:
return false
for i in s:
if i in symbol:
if symbol_mark==0 and model!=1 and blank_mark==0:
symbol_mark=1
else:
return false
elif i in number:
if model==1 and blank_mark==0:
float_length+=1
symbol_mark = 1
elif model==2 and blank_mark==0:
e_length+=1
symbol_mark = 1
elif model==0 and blank_mark==0:
int_length+=1
symbol_mark = 1
else:
return false
elif i=='.' and model==0 and blank_mark==0:
model = 1
elif i=='e' and model<2 and int_length+float_length>0 and blank_mark==0:
model = 2
symbol_mark = 0
elif i==' ':
if int_length+float_length+e_length>0 or model!=0 or symbol_mark!=0:
blank_mark = 1
else:
return false
if model==2 and e_length==0:
return false
elif model<=1 and float_length==0 and int_length==0:
return false
return true
在方法一的基礎上簡化邏輯,進行無符號整數和有符號整數的判定:
class solution:
def isnumber(self, s: str) -> bool:
if len(s)==0:
return false
numeric = false
for i in range(len(s)):
if s[i]!=' ':
break
if i0 and s[0]=='.':
if len(s)>1:
numeric1, s = self.isunsignedint(s[1:])
else:
numeric1 = false
s = ''
numeric = numeric or numeric1
if numeric==false:
return numeric
if len(s)>0 and s[0]=='e':
if len(s)>1:
numeric2, s = self.isint(s[1:])
else:
numeric2 = false
s = ''
numeric = numeric and numeric2
if numeric==false:
return numeric
for i in range(len(s)):
if s[i]!=' ':
return false
return numeric
def isunsignedint(self, s):
number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
l0 = len(s)
for i in range(len(s)):
if s[i] not in number:
return i>0, s[i:]
return true, ''
def isint(self, s):
if s[0]=='+' or s[0]=='-':
if len(s)>1:
return self.isunsignedint(s[1:])
else:
return false, ''
return self.isunsignedint(s)
Leetcode騰訊精選50題題解 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
leetcode 66,陣列表示的數加一
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1 2,3 輸出 1 2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4 3,2 1 輸出 4 3,...
C 數的表示
二進位制b 八進位制o 十進位制d 十六進製制h 0x十六進製制 十進位制數轉換成r進製數 整數部分除基取餘,上右下左 小數部分乘基取整,上左下右。浮點數的階用一種稱為移碼的編碼表示方法,方便對階。階的編碼稱為階碼 階用移碼表示的01序列 e 移 偏置常數 e,偏置常數為2n 1或2n 1 1。in...