欢迎光临散文网 会员登陆 & 注册

Leetcode Day7 2

2022-04-08 22:58 作者:我喜欢喝一点点  | 我要投稿

剑指 Offer 20. 表示数值的字符串

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

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

  1. 若干空格

  2. 一个 小数 或者 整数

  3. (可选)一个 'e' 或 'E' ,后面跟着一个 整数

  4. 若干空格

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

  1. (可选)一个符号字符('+' 或 '-'

  2. 下述格式之一:

    1. 至少一位数字,后面跟着一个点 '.'

    2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字

    3. 一个点 '.' ,后面跟着至少一位数字

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

  1. (可选)一个符号字符('+' 或 '-'

  2. 至少一位数字

部分数值列举如下:

  • ["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]

部分非数值列举如下:

  • ["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]

 

这道题自动机其实就是穷举法吧。。所以我直接穷举了

边界条件太复杂了,错了好几次……


总之最后还是过了,建议s1这种数组直接替换吧,好容易写错。

class Solution:

    def isNumber(self, s: str) -> bool:

        s1=s.strip()

        if not s1:return False #如果只有空格,返回错误

        i=0  #计数

        isE=False

        isDot=False

        isNum=False

        while i<len(s1):

            if '0'<=s1[i]<='9':

                i+=1

                isNum=True

            elif s1[i]=='e' or s1[i]=='E':

                if isNum==False or isE==True:return False

                if i==len(s1)-1:

                    return False

                i+=1

                isE=True

            elif s1[i]=='+' or s1[i]=='-':

                if i!=len(s1)-1 and (i==0 or s[i-1]=='e'or s[i-1]=='E'):

                    i+=1

                else:

                    return False

            elif s1[i]=='.':

                if i==len(s1)-1:return False

                if isE==True or isDot==True:return False

                if '0'<=s1[i-1]<='9' or '0'<=s1[i+1]<='9':

                    i+=1

                    isDot=True

                else:

                    return False

        return True


Leetcode Day7 2的评论 (共 条)

分享到微博请遵守国家法律