Leetcode 65:有效數字(超詳細的解法!!!)
阿新 • • 發佈:2018-12-20
驗證給定的字串是否為數字。
例如:
"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
如有問題,希望大家指出!!!