LeetCode 065 有效數字(Valid Number)Python解法
阿新 • • 發佈:2018-12-16
題目描述:
驗證給定的字串是否為數字。
例如: “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
小結
分析的時候條件要搞清楚,分類討論的指標要一致,在這裡我們按照某一位可能出現的字元來分類討論,條理就比較清晰