1. 程式人生 > >【Leetcode】Python實現字串轉整數 (atoi)

【Leetcode】Python實現字串轉整數 (atoi)

實現 atoi,將字串轉為整數。

在找到第一個非空字元之前,需要移除掉字串中的空格字元。如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。

字串可以在形成整數的字元後面包括多餘的字元,這些字元可以被忽略,它們對於函式沒有影響。

當字串中的第一個非空字元序列不是個有效的整數;或字串為空;或字串僅包含空白字元時,則不進行轉換。

若函式不能執行有效的轉換,返回 0。

說明:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。如果數值超過可表示的範圍,則返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例 1:

輸入: "42"
輸出: 42

示例 2:

輸入: "   -42"
輸出: -42
解釋: 第一個非空白字元為 '-', 它是一個負號。
     我們儘可能將負號與後面所有連續出現的數字組合起來,最後得到 -42

示例 3:

輸入: "4193 with words"
輸出: 4193
解釋: 轉換截止於數字 '3' ,因為它的下一個字元不為數字。

示例 4:

輸入: "words and 987"
輸出: 0
解釋: 第一個非空字元是 'w', 但它不是數字或正、負號。
     因此無法執行有效的轉換。

示例 5:

輸入: "-91283472332"
輸出: -2147483648 解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍。 因此返回 INT_MIN (−231) 。

個人使用正則,覺得比較方便

class Solution(object):
    def myAtoi(self, str):
        """
        :type str: str
        :rtype: int
        """
        # 匯入正則模組
        import re
        # 字串中查詢全部符合條件的整數,返回的是列表,第一個引數是正則,第二個引數是字串
# strip()字串去空格 ret = re.findall(r"^[-+]?\d+", str.strip()) # 判斷是否有匹配的值,沒有的話返回0,例如"word values 987",匹配不到,返回0 if ret: ret_str = ret[0] # 匹配的數字的字串 ret_str2 = "" # 記錄去符號的字串,ret_str後面還要使用,所以定義一個新的變數記錄 # 判斷是否帶有符號 + or - if ret_str[0] == "-" or ret_str[0] == "+": ret_str2 = ret_str[1:] else: ret_str2 = ret_str # str轉int ret_int = int(ret_str2) # 判斷第一個字元是否為負號 if ret_str[0] == "-": # 三目運算子,判斷是否溢位 # 如果ret_int <= 2**31則返回-ret_int,否則返回-2**31 return -ret_int if ret_int <= 2**31 else -2**31 else: return ret_int if ret_int < 2**31 else 2**31-1 else: return 0 if __name__ == '__main__': s = Solution() atoi_str = s.myAtoi("word values 987") print(atoi_str)

相關推薦

LeetcodePython實現字串整數 (atoi)

實現 atoi,將字串轉為整數。 在找到第一個非空字元之前,需要移除掉字串中的空格字元。如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的數字字元組合起

LeetCodePython 8.字串整數 (atoi)

字串轉整數 (atoi) 題目:實現 atoi,將字串轉為整數。 在找到第一個非空字元之前,需要移除掉字串中的空格字元。如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則

leetcodePython實現-7.顛倒整數

7.顛倒整數 給定一個範圍為 32 位 int 的整數,將其顛倒。 例 1: 輸入: 123 輸出: 321 例 2: 輸入: -123 輸出: -321 例 3: 輸入: 120 輸出: 21

leetcodePython實現-13.羅馬數字整數

13.羅馬數字轉整數 給定一個羅馬數字,將其轉換成整數。 返回的結果要求在 1 到 3999 的範圍內。 我 d = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

LeetcodePython實現反轉整數

給定一個 32 位有符號整數,將整數中的數字進行反轉。 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸

leetcodePython實現-205.同構字串

205.同構字串 描述 給定兩個字串 s 和 t,判斷它們是否是同構的。 如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。 所有出現的字元都必須用另一個字元替換,同時保留字元的順序。兩個字元不能對映到同一個字元上,但字元可以

LeetcodePython實現整數與羅馬數字的相互轉換

整數轉羅馬數 class Solution(object): def intToRoman(self, num): """ :type num: int

leetcodePython實現-122.買賣股票的最佳時機II

122.買賣股票的最佳時機II 描述 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次

leetcodePython實現-121.買賣股票的最佳時機

121.買賣股票的最佳時機 描述 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出股票。 示例

leetcodePython實現-67.二進位制求和

67.二進位制求和 描述 給定兩個二進位制字串,返回他們的和(用二進位制表示)。 輸入為非空字串且只包含數字 1 和 0。 示例1 輸入: a = “11”, b = “1” 輸出: “100” 示例2 輸入: a

leetcodePython實現-136.只出現一次的數字

136.只出現一次的數字 描述 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1:

LeetcodePython實現正則表示式匹配

給定一個字串 (s) 和一個字元模式 (p)。實現支援 ‘.’ 和 ‘*’ 的正則表示式匹配。 ‘.’ 匹配任意單個字元。 ‘*’ 匹配零個或多個前面的元素。 匹配應該覆蓋整個字串 (s) ,而不

LeetcodePython實現Z字形變換

Z字形變換 題意解釋: 比如有一個字串 “0123456789ABCDEF”,轉為zigzag 當 n = 2 時: 0 2 4 6 8 A C E 1 3 5 7 9 B D F 當 n = 4 時: 0 6 C 1

LeetcodePython實現最長迴文子串

動態規劃實現 根據迴文的特性,一個大回文按比例縮小後的字串也必定是迴文,比如ABCCBA,那BCCB肯定也是迴文。所以我們可以根據動態規劃的兩個特點: (1)把大問題拆解為小問題 (2)重複利用之

leetcodePython實現-190.顛倒二進位制位

190.顛倒二進位制位 描述 顛倒給定的 32 位無符號整數的二進位制位。 示例 輸入: 43261596 輸出: 964176192 解釋: 43261596 的二進位制表示形式為 0000001010010100000111

leetcodePython實現-141.環形連結串列

141.環形連結串列 描述 給定一個連結串列,判斷連結串列中是否有環。 進階: 你能否不使用額外空間解決此題? 我…遍歷了以後超出時間限制,於是看大家總結的方法。一個就是設定兩個指標slow和fast,一個步長為1,一個步長為2進行遍歷

leetcodePython實現-225.用佇列實現

225.用佇列實現棧 描述 使用佇列實現棧的下列操作: push(x) – 元素 x 入棧 pop() – 移除棧頂元素 top() – 獲取棧頂元素 empty() – 返回棧是否為空 注意 你只能使用佇列的基本操

leetcodePython實現-203.刪除連結串列中的節點

203.刪除連結串列中的節點 描述 刪除連結串列中等於給定值 val 的所有節點。 示例 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->

leetcodePython實現-83.刪除排序連結串列中的重複元素

83.刪除排序連結串列中的重複元素 描述 給定一個排序連結串列,刪除所有重複的元素,使得每個元素只出現一次。 示例1 輸入: 1->1->2 輸出: 1->2 示例2 輸入: 1->1->2-

LeetcodePython實現兩個排序陣列的中位數

當兩個數組合並後的總元素長度是奇數時,中位數的下標是n/2。 當兩個數組合並後的總元素個數是偶數時,中位數是下標n/2-1和下標n/2兩個元素的平均值。 所以不論總長度的奇偶性,可以將n/2作為右中