【LeetCode】65. Valid Number 解题报告(Python)

题目分析:

这一题让我们判断一个数是否可转换为数字,开始直接调用python转换为float的函数 + 异常返回(见附),虽然通过了但感觉很过分。这题的本意应该是让我们分为很多情况逐位经过多个判断,我参考了[LeetCode] Valid Number 验证数字,我只是把他的代码转为了python版本,原作者的解析写的非常到位,不再繁叙。

测试代码:

#submit
class Solution:
    def isNumber(self, s: str) -> bool:
        num = False; numAfterE = True; dot = False; exp = False; sign = False; length =len(s)
        for i in range(length):
            if s[i] == ' ':
                if i < length - 1 and s[i + 1] != ' ' and (num or dot or exp or sign):  return False
            elif s[i] in {'+', '-'}:
                if i > 0 and s[i - 1] not in {' ', 'e'}: return False
                sign = True
            elif s[i] >= '0' and s[i] <= '9':
                num = True
                numAfterE = True
            elif s[i] == '.':
                if dot or exp: return False
                dot = True
            elif s[i] == 'e':
                if exp or not num: return False
                exp = True
                numAfterE = False
            else: return False
        return num and numAfterE

print(Solution().isNumber(" 005047e+6"))    #提交时请删除该行

附:(调用转换为float + 异常处理的代码)

class Solution:
    def isNumber(self, s: str) -> bool:
        try:
            float(s)
            return True
        except:
            return False

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值