LeetCode:65. Valid Number - Python

问题描述:

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/

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

猜你喜欢

转载自blog.csdn.net/XX_123_1_RJ/article/details/84621337