1. 程式人生 > >Leetcode 65:有效數字(超詳細的解法!!!)

Leetcode 65:有效數字(超詳細的解法!!!)

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

例如:
"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

如有問題,希望大家指出!!!