美文网首页
python实现leetcode之65. 有效数字

python实现leetcode之65. 有效数字

作者: 深圳都这么冷 | 来源:发表于2021-09-06 00:49 被阅读0次

    解题思路

    代码比较长,但是很简单
    「设计模式」中的访问者模式
    使用一个类管理匹配,检查匹配状态即可

    65. 有效数字

    代码

    class Solution:
        def isNumber(self, s: str) -> bool:
            mn = MatchNumber(s)
            mn.match()
            return mn.is_match()
    
    
    class MatchNumber:
        def __init__(self, s):
            self.s = s
            self.index = 0
            self.fail = False
    
        def match(self):
            self.match_number()
            x = self.match_exp()
            if x:
                self.match_int()
    
        def is_match(self):
            return not self.fail and self.index == len(self.s)
    
        def match_number(self):
            self.match_sign(False)
            x = self.match_digits(False)
            self.match_point(False)
            self.match_digits(not x)
    
        def match_int(self):
            self.match_sign(False)
            self.match_digits(True)
    
        def match_sign(self, force=False):
            if self.index < len(self.s) and self.s[self.index] in '-+':
                self.index += 1
                return True
            elif force:
                self.fail = True
    
        def match_point(self, force=False):
            if self.index < len(self.s) and self.s[self.index] == '.':
                self.index += 1
                return True
            elif force:
                self.fail = True
    
        def match_digits(self, force=False):
            idx = self.index
            if force and self.index >= len(self.s):
                self.fail = True
            elif force and not self.s[self.index].isdigit():
                self.fail = True
            else:
                while self.index < len(self.s) and self.s[self.index].isdigit():
                    self.index += 1
            return idx != self.index
    
        def match_exp(self, force=False):
            if self.index < len(self.s) and self.s[self.index] in 'eE':
                self.index += 1
                return True
            elif force:
                self.fail = True
    
    效果图

    相关文章

      网友评论

          本文标题:python实现leetcode之65. 有效数字

          本文链接:https://www.haomeiwen.com/subject/kkkjwltx.html