1. 程式人生 > >LeetCode 065 有效數字(Valid Number)Python解法

LeetCode 065 有效數字(Valid Number)Python解法

題目描述:

驗證給定的字串是否為數字。

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

說明: 我們有意將問題陳述地比較模糊。在實現程式碼之前,你應當事先思考所有可能的情況。

分析:

1)出現在e之前的應該為一個有效的浮點數,e之後的應該為有效整數。

2)有效浮點數規則: # a)正負號只能出現在最前面; # b)小數點至多一個; # c)中間不能出現其他非數字字元; # d)至少有一個數字

3)有效整數規則: # a)正負號只能出現在最前面; # b)中間不能出現其他非數字字元; # c)至少有一個數字

解法:

class Solution(object):
    def isNumber(self, s):
        """
        :type s: str
        :rtype: bool
        """
           
        def isInt(s):
            NO_NUM = True
            for i in range(len(s)):
                # 正負號只能在首位
                if s[i] =="+" or s[i] =="-":
                    if i == 0:
                        continue
                    else:
                        return False#加上continue 超過 56% ,不加 超過 22%
                # 至少有一個數字
                elif s[i] in "1234567890": 
                    NO_NUM = False
                # 不能有其他字元   
                else:
                    return False

            return not NO_NUM 

        def isFloat(s):
            DOT_COUNT = 0
            NO_NUM = True
            for i in range(len(s)):
                # 正負號只能在首位
                if s[i] =="+" or s[i] =="-": 
                    if i == 0:
                        continue
                    else:
                        return False
                # 小數點至多有一個  
                elif s[i] ==".":
                    DOT_COUNT += 1
                    if DOT_COUNT > 1:
                        return False
                # 至少有一個數字   
                elif s[i] in "1234567890":
                    NO_NUM = False
                # 不能有其他字元  
                else:
                    return False
            return not NO_NUM 
     
   
        s = s.strip()
        if 'e' not in s:
            return isFloat(s)
        else:
            t = s.split('e')
            if len(t) == 2:
                return (isInt(t[1]) and isFloat(t[0]))
            else:
                return False

小結

分析的時候條件要搞清楚,分類討論的指標要一致,在這裡我們按照某一位可能出現的字元來分類討論,條理就比較清晰