题解 | #表示数值的字符串#
表示数值的字符串
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)