Leetcode Day7 2
劍指 Offer 20. 表示數(shù)值的字符串
請實現(xiàn)一個函數(shù)用來判斷字符串是否表示數(shù)值(包括整數(shù)和小數(shù))。
數(shù)值(按順序)可以分成以下幾個部分:
若干空格
一個?小數(shù)?或者?整數(shù)
(可選)一個?
'e'
?或?'E'
?,后面跟著一個?整數(shù)若干空格
小數(shù)(按順序)可以分成以下幾個部分:
(可選)一個符號字符(
'+'
?或?'-'
)下述格式之一:
至少一位數(shù)字,后面跟著一個點?
'.'
至少一位數(shù)字,后面跟著一個點?
'.'
?,后面再跟著至少一位數(shù)字一個點?
'.'
?,后面跟著至少一位數(shù)字
整數(shù)(按順序)可以分成以下幾個部分:
(可選)一個符號字符(
'+'
?或?'-'
)至少一位數(shù)字
部分數(shù)值列舉如下:
["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
部分非數(shù)值列舉如下:
["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]
?
這道題自動機其實就是窮舉法吧。。所以我直接窮舉了
邊界條件太復雜了,錯了好幾次……

總之最后還是過了,建議s1這種數(shù)組直接替換吧,好容易寫錯。
class?Solution:
????def?isNumber(self,?s:?str)?->?bool:
????????s1=s.strip()
????????if?not?s1:return?False?#如果只有空格,返回錯誤
????????i=0??#計數(shù)
????????isE=False
????????isDot=False
????????isNum=False
????????while?i<len(s1):
????????????if?'0'<=s1[i]<='9':
????????????????i+=1
????????????????isNum=True
????????????elif?s1[i]=='e'?or?s1[i]=='E':
????????????????if?isNum==False?or?isE==True:return?False
????????????????if?i==len(s1)-1:
????????????????????return?False
????????????????i+=1
????????????????isE=True
????????????elif?s1[i]=='+'?or?s1[i]=='-':
????????????????if?i!=len(s1)-1?and?(i==0?or?s[i-1]=='e'or?s[i-1]=='E'):
????????????????????i+=1
????????????????else:
????????????????????return?False
????????????elif?s1[i]=='.':
????????????????if?i==len(s1)-1:return?False
????????????????if?isE==True?or?isDot==True:return?False
????????????????if?'0'<=s1[i-1]<='9'?or?'0'<=s1[i+1]<='9':
????????????????????i+=1
????????????????????isDot=True
????????????????else:
????????????????????return?False
????????return?True
