题解 | #表示数值的字符串#

表示数值的字符串

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)

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务