题解 | #表示数值的字符串#
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
"""
分析:
数据处理,先将字符串左边和右边的空格全部去除掉,再将字符串内部的英文全部变为小写,方便后续处理
整数判断:先判断第一位是不是符号+或-,若是,则将第一位去除掉,再判断剩下的部分是不是纯数字,若是则返回True,否则返回False
小数判断:先判断第一位是不是符号+或-,若是,则将第一位去除掉;再拿到小数点.的位置,切片的方式获取到小数点左边部分left和右边部分right,再进行判断:可分两种情况,如下
(1)、left和right都不为空,则判断左边部分和右边部分是不是都是纯数字,若是则返回True, 否则返回False
(2)、left和right至少有一个为空,则判断另外一半的部分是不是纯数字,若是则返回True, 否则返回False
科学计数判断:先判断第一位是不是符号+或-,若是,则将第一位去除掉;再拿到e的位置,切片的方式获取到e左边部分left和右边部分right,再进行判断,这里的判断很简单,只需要判断
left部分是不是小数或整数和right部分是不是整数(这里可复用前面的判断)即可,若均满足,则返回True, 否则返回False
"""
class Solution:
def isNumeric(self, str: str) -> bool:
# write code here
str = str.strip().lower()
def is_decimal(str):
if str[0] == '+' or str[0] == '-':
str = str[1:]
index = str.find('.')
if index == -1:
return False
if str[:index] and str[index+1:]:
return str[:index].isdigit() and str[index+1:].isdigit()
else:
return str[:index].isdigit() or str[index+1:].isdigit()
def is_int(str):
if not str:
return False
if str[0] == "+" or str[0] == "-":
str = str[1:]
if str.isdigit():
return True
return False
def is_scientific(str):
index = str.index("e")
if str[:index] and str[index + 1 :]:
return (is_decimal(str[:index]) or is_int(str[:index])) and is_int(str[index + 1 :])
return False
if "e" in str:
return is_scientific(str)
elif "." in str:
return is_decimal(str)
else:
return is_int(str)

