LeetCode 65. Valid Number--Python实现

14 篇文章 0 订阅
14 篇文章 0 订阅

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

Update (2015-02-10):

The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

本题可以通过状态机来做,也可以通过循环枚举的过程来匹配。参照博客

class Solution(object):
    def isNumber(self, s):
        """
        :type s: str
        :rtype: bool
        """
        begin, last = 0, len(s) - 1
        # 将字符串前后的空格去掉
        while begin <= last and s[begin] == ' ':
            begin += 1
        while begin <= last and s[last] == ' ':
            last -= 1

        # 数字前为正号或者负号的情况,首位后移
        if begin < last and (s[begin] == '+' or s[begin] == '-'):
            begin += 1
        num, dot, exp = False, False, False

        while begin <= last:
            # 该字符为数字
            if s[begin] >= '0' and s[begin] <= '9':
                num = True
            # 若首位为"."则返回false,否则标记为小数
            elif s[begin] == '.':
                if dot or exp:
                    return False
                dot = True
            # 若首位为"e"或"E",则返回false,否则标记为科学计数
            elif s[begin] == 'e' or s[begin] == 'E':
                if exp or not num:
                    return False
                exp, num = True, Fals #后面必须有数字才行啊
            # 若遇到正负号,则判断前一位是否为字符"e"或"E"
            elif s[begin] == '+' or s[begin] == '-':
                if s[begin - 1] != 'e':
                    return False
            else:
                return False
            begin += 1
        return num
这里有个博友画的一个状态图,有助于理解,参照 博客



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值