"""
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串“+100”、“5e2”、“-123”、“3.123”、“-1E-16”都表示数值,
但"12e"、"1a3.14"、"1.1.2"、"+5"、"12e+5.4"都不是
"""
class Solution:
def isNumeric(self, s):
if s is None or len(s) == 0:
return False
hasE, isDecimal, hasSign = False, False, False
for i in range(len(s)):
# 如果有e,只能有一个e且不能是最后一个字符
if s[i] == 'e' or s[i] =='E':
if hasE or i == len(s) - 1:
return False
hasE = True
# 小数点不能重复出现或和e共线
elif s[i] == '.':
if hasE or isDecimal:
return False
isDecimal = True
elif s[i] == '+' or s[i] == '-':
# 重复出现符号时,必须跟在e后面
if hasSign and s[i - 1] != 'e' and s[i - 1] != 'E':
return False
if not hasSign and i > 0 and s[i - 1] != 'e' and s[i - 1] != 'E':
return False
hasSign = True
elif s[i] < '0' or s[i] > '9':
return False
return True
if __name__ == '__main__':
solution = Solution()
s1 = '+1222'
s2 = "12e"
s3 = '+-1'
print(solution.isNumeric(s1))
print(solution.isNumeric(s2))
print(solution.isNumeric(s3))
剑指offer python版 20.表示数值的字符串
最新推荐文章于 2022-03-24 15:58:44 发布