• LeetCode刷题(python版)——Topic65.有效数字


    一、题设

    有效数字(按顺序)可以分成以下几个部分:

    1. 一个 小数 或者 整数
    2. (可选)一个 'e' 或 'E' ,后面跟着一个 整数

    小数(按顺序)可以分成以下几个部分:

    1. (可选)一个符号字符('+' 或 '-'
    2. 下述格式之一:
      1. 至少一位数字,后面跟着一个点 '.'
      2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
      3. 一个点 '.' ,后面跟着至少一位数字

    整数(按顺序)可以分成以下几个部分:

    1. (可选)一个符号字符('+' 或 '-'
    2. 至少一位数字

    部分有效数字列举如下:["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]

    部分无效数字列举如下:["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]

    给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。

    示例 1:

    输入:s = "0"
    输出:true
    

    示例 2:

    输入:s = "e"
    输出:false
    

    示例 3:

    输入:s = "."
    输出:false

    二、基本思路

            根据题意,合法的表达为:(小数/整数)[E/e (整数)] 

            思路就是先找到e/E,再判断前面是否为小数或者整数,后面是否为整数即可

            step1:找到e/E:遍历数组,找到e/E break跳出即可。

            step2:判断一个数是否为整数:有标志位无关紧要跳过,当出现小数点'.',则返回False;当出现一个数字时,即可返回True,其余情况都是返回False.

            step3:判断一个数是否为小数:有标志位同样跳过,当同时满足出现小数点一次,数字一次以上时,即可返回True,其余情况都是返回False.

    三、代码实现

    1. def isNumber(self, s):
    2. def check(st,IsInt):
    3. start = 0
    4. if start < len(st) and (st[start] == '+' or st[start] == '-'):
    5. start += 1
    6. point,digit = False,False
    7. for i in range(start,len(st)):
    8. if st[i] == '.' :
    9. if point or IsInt:
    10. return False
    11. point = True
    12. elif st[i] >= '0' and st[i] <= '9':
    13. digit = True
    14. else:
    15. return False
    16. return digit
    17. eidx = -1
    18. check("0",False)
    19. for i in range(len(s)):
    20. if s[i] == 'e' or s[i] == 'E':
    21. eidx = i
    22. break
    23. if eidx == -1:
    24. return check(s,False)
    25. return check(s[0:eidx],False) and check(s[eidx+1:len(s)],True)

    四、效率总结

     

  • 相关阅读:
    MYSQL高可用架构之MHA实战二 安装和配置MHA架构(真实可用)
    SpringBoot SpringBoot 基础篇 2 SpringBoot 基础配置 2.3 配置文件类型
    如何使用python编译器来编写代码,不使用anaconda和pycharm
    Python 面向对象编程:类、对象、初始化和方法详解
    工业设计:点石成金的“金手指”
    图论|207. 课程表 210. 课程表 II
    懒说
    【计算机网络】数据链路层:点对点协议PPP
    网络安全——终端安全
    Spring 中的 Bean
  • 原文地址:https://blog.csdn.net/weixin_54039182/article/details/127871669