LeetCode:65. Valid Number - Python

189 篇文章 3 订阅
151 篇文章 2 订阅

问题描述:

65. 有效数字

验证给定的字符串是否为数字。

例如:

字符串true or false
“0”true
" 0.1 "true
“abc”false
“1 a”false
“2e10”true
" -90e3 "true
" 1e"false
“e3”false
" 6e-1"true
" 99e2.5 "false
“53.5e93”true
" --6 "false
“-+3”false
“95a54e53”false

说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。

问题分析:

方法1
(1)借用,编程语言自带函数实现,(好像在作弊哈)


方法2
尽可能的考虑更多的情况,其中仔细归纳一下,会发现,规则并不多。

(1)首先,对一个字符串来说,要去除首位的空格符。

(2)字符e只能出现数字后面,且e后面不能出现小数点(.),也就是e后面必须是整数。

(3)+-号,只能出现在首位,或者紧跟e后面,其他情况均不对。

(4)小数点(.)只能出现一次,且只能是出现在e的前面。

(5)根据上面几条规则,可以设置几个标识符,例如,isDot, isDigit, isE 扫描一边字符串,即可完成。

Python3实现:

# 方法 1

class Solution:
    def isNumber(self, s):

        try:
            float(s)
        except:
            return False

        return True


if __name__ == '__main__':
    solu = Solution()
    print(solu.isNumber('95a54e53'))
# 方法 2

class Solution:
    def isNumber(self, s):

        s = s.strip()  # 去除首尾空格

        isDot, isDigit, isE = False, False, False  # 点,数字,e

        for i, x in enumerate(s):
            if x == "e":
                if not isDigit or isE:  # 前面没有数字,or 前面已经存在字符 e
                    return False

                isDigit = False  # 设置isDigit = false
                isE = True
            elif x in "+-":
                if i != 0 and s[i-1] != "e":  # +- 只能出现首位,和 字符e的后面
                    return False
            elif x == ".":
                if isDot or isE:  # 字符 .(小数点)只能出现一次,而且是只能出现在 e 的前面
                    return False
                isDot = True
            elif x.isdecimal():  # 检查字符串是否只包含十进制字符
                isDigit = True
            else:
                return False

        return len(s) > 0 and isDigit


if __name__ == '__main__':
    solu = Solution()
    print(solu.isNumber('95a54e53'))

声明: 总结学习,有问题或不妥之处,可以批评指正哦。

题目链接:leetcode-cn.com/problems/valid-number/

参考链接:他人提交的优秀代码,链接不详。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值