Leetcode 65:有效数字(超详细的解法!!!)

版权声明:本文为博主原创文章,未经博主允许不得转载。有事联系:[email protected] https://blog.csdn.net/qq_17550379/article/details/85050187

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

例如:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

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

更新于 2015-02-10:
C++函数的形式已经更新了。如果你仍然看见你的函数接收 const char * 类型的参数,请点击重载按钮重置你的代码。

解题思路

类似问题

Leetcode 8:字符串转换整数 (atoi)(超详细的解法!!!)

主要考虑这样的几种情况,首先我们将字符串两边的空格给去除。然后判断首个字符是不是+-其中之一,如果是的话,我们就要跳过。接下来我们就要判断字符串了,首先可以肯定的是,不能出现'0123456789+-eE.'之外的任何字符。我们分成以下几种情况考虑

  • 'eE.'只能出现一次
  • 'eE'不能出现在最后的位置,'.'可以出现在最后的位置
  • 'eE.'之前必须有数字
  • 如果出现过了'eE',那么'.'就不能再出现了
  • 如果有'+-',那么必须在'eE'之后的一位,并且出现在最后的位置
class Solution:
    def isNumber(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = s.lstrip().rstrip()
        e, point, num = False, False, False
        i, s_len = 0, len(s)
        
        if s_len > 0 and s[i] in '+-':
            i += 1
            
        while i < s_len:
            c = s[i]
            if c in '0123456789':
                i += 1
                num = True
                continue
            elif c in 'eE':
                if not num or e or i == s_len - 1:
                    return False
                e = True
                if s[i+1] in '+-' and i < s_len - 2:
                    i += 1   
            elif c == '.':
                if point or e:
                    return False
                point = True
            else:
                return False                

            i += 1
        return num

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

猜你喜欢

转载自blog.csdn.net/qq_17550379/article/details/85050187