《LeetCode筆記50》 表示數值的字串

2021-10-05 13:43:09 字數 2883 閱讀 2252

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+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...