栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode-【模拟】有效数字

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-【模拟】有效数字

整体思路

整个思路如下图:

python实现
class Solution(object):
    def isNumber(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if s.find('e') != -1:
            s1 = s[0:s.find('e')]
            s2 = s[s.find('e')+1:]
            #先处理'e'后字符串(整数)
            if self.isInteger(s2) == False:
                return False
            else:
                #对'e'前字符串处理
                if s1.find('.') == -1:
                    return self.isInteger(s1)
                else:
                    return self.isDecimal(s1)
        
        elif s.find('E') != -1:
            s1 = s[0:s.find('E')]
            s2 = s[s.find('E')+1:]
            #先处理'E'后字符串(整数)
            if self.isInteger(s2) == False:
                return False
            else:
                #对'E'前字符串处理
                if s1.find('.') == -1:
                    return self.isInteger(s1)
                else:
                    return self.isDecimal(s1)
        
        else:
            if s.find('.') == -1:
                return self.isInteger(s)
            else:
                return self.isDecimal(s)



    def isInteger(self, s, op = True):
        #op代表是否允许带符号位
        if s.find('.') == -1 and len(s) >= 1:
            #不含小数点
            if op == True and (s[0] == '-' or s[0] == '+'):
                if len(s) == 1:
                    return False
                #去掉第一个符号位
                s = s[1:]
            #检查s是否包含数字以外的非法字符
            for char in s:
                if char>='0' and char<='9':
                    continue
                else:
                    return False
            return True
        else:
            return False


    def isDecimal(self, s):
        dot = s.find('.')
        if len(s)>=2:
            #至少包含'.'和一位数字
            if s.find('-') != -1 and s.find('-') < dot:
                #符号在'.'前
                if s[0] != '-':
                    #但符号不是第一位
                    return False
                else:
                    s=s[1:]
                    dot -= 1
            elif s.find('+') != -1 and s.find('+') < dot:
                 #符号在'.'前
                if s[0] != '+':
                    #但符号不是第一位
                    return False
                else:
                    s=s[1:]
                    dot -= 1
            #以上去除合法的符号位(第一位)
            if len(s) <= 1:
                #此时字符串只有'.'
                return False

            for index in range(len(s)):
                if index == dot:
                    #跳过第一个小数点
                    continue
                else:
                    char = s[index]
                    if char >= '0' and char <= '9':
                        continue
                    else:
                        return False
            return True

        else:
            return False



部分代码解释

写了两个子函数类内自定义函数:判断是否为整数、判断是否为小数

几个特殊测试用例

‘+.’
‘.’
‘.1’
‘.-’

代码性能

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/348271.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号