leetcode小題解析

coder777發表於2019-01-19

描述
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

Some examples:
“0” => true
” 0.1 ” => true
“abc” => false
“1 a” => false
“2e10” => true

分析
該題的說明比較模糊,第一個單詞我們都對每一位字元進行累計,這樣可以累積出從A到Z每個單詞出現了幾次,然後我們統計第二個單詞,再去計算從A到Z每個單詞出現了幾次。如果兩者相等,則認為兩個單詞是“同素異形體”所以需要慢慢進行嘗試來弄清楚哪些是合法的數字。

程式碼
class Solution:

def isNumber(self, s):
    """
    :type s: str
    :rtype: bool
    """
    # 去除前後的空格
    temp_s = s.strip()
    numberSeen = False
    pointSeen = False
    eSeen = False
    numberAftereSeen = True
    for i in range(len(temp_s)):
        if temp_s[i].isdigit():
            numberSeen = True
            numberAftereSeen = True
        elif temp_s[i] == ".":
            # 小數點前面不能出現e和小數點
            if eSeen or pointSeen:
                return False
            pointSeen = True
        elif temp_s[i] == "e":
            # e前面不能出現e,並且需要有數字
            if eSeen or not numberSeen:
                return False
            eSeen = True
            # 保證e後面也有數字
            numberAftereSeen = False
        elif temp_s[i] in ["+", "-"]:
            # 符號只能再0位和e後面一位
            if i != 0 and temp_s[i-1] != "e":
                return False
        else:
            return False
    return numberSeen and numberAftereSeen

相關文章