python版本解

表示数值的字符串

http://www.nowcoder.com/questionTerminal/e69148f8528c4039ad89bb2546fd4ff8

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param str string字符串 
# @return bool布尔型
#方法一:排除法
class Solution:
    def isNumeric(self , str ):
        # write code here
        point=False
        e=False
        leop=False
        reop=False
        lens=len(str)
        eindex=lens
        if 'e' in str :
            eindex=str.index('e')
        if 'E' in str:
            eindex=str.index('E')
        if lens==1:
            if str[0]<'0' or str[0]>'9':
                return False
        for i in range(lens):
            if str[i]=='.':
                if point or i>eindex:
                    return False
                point=True
            elif str[i]=='e' or str[i]=='E':
                if e or i==0 or i==lens-1:
                    return False
                e=True
                eindex=i
            elif str[i]=='+' or str[i]=='-':
                if i<eindex:
                    if str[i]==str[:eindex]:
                        return False
                    if leop or i!=0:
                        return False
                    leop=True
                else:
                    if str[i]==str[eindex+1:]:
                        return False
                    if reop or i!=eindex+1:
                        return False
                    reop=True
            elif str[i]>='0'and str[i]<='9':
                continue 
            else:
                return False
        return True

方法二:穷举法

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param str string字符串 
# @return bool布尔型
#
class Solution:
    def isNumeric(self , str ):
        # write code here
        res=[
            {'s':1, 'd':2, '.':3},  ##0 开头可放置的字符
            {'.':3, 'd':2 },        ##1 符号开头,后面可放置的字符
            {'d':2, '.':4,'e':5},   ##2 数字后面可放置的字符
            {'d':4},                ##3 点开头后面可放置的字符
            {'d':4,'e':5},          ##4 数字+点号,后面可以放置的字符
            {'s':6,'d':7},          ##5 e后面可放置的字符
            {'d':7},                ##6 e+符号,不能以符号结尾,后面可以放置的字符
            {'d':7}                 ##7 以数字结尾
            ]
        p=0
        for i in str:
            if i=='+' or i=='-':
                t= 's'
            elif i in 'eE':
                t='e'
            elif i=='.':
                t='.'
            elif i>='0' and i<='9':
                t='d'
            else:
                t='?'
            if t not in res[p]:
                return False
            p=res[p][t]
        return p in [2,4,7]
全部评论

相关推荐

10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
点赞 评论 收藏
分享
字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务