天天看點

leetcode 7 整數反轉 8 字元串轉換整數 (atoi)leetcode 7 整數反轉 8 字元串轉換整數 (atoi)

leetcode 7 整數反轉 8 字元串轉換整數 (atoi)

7. 整數反轉

難度簡單2807收藏分享切換為英文接收動态回報

給你一個 32 位的有符号整數

x

,傳回将

x

中的數字部分反轉後的結果。

如果反轉後整數超過 32 位的有符号整數的範圍

[−231, 231 − 1]

,就傳回 0。

假設環境不允許存儲 64 位整數(有符号或無符号)。

示例 1:

輸入:x = 123
輸出:321
           

示例 2:

輸入:x = -123
輸出:-321
           

示例 3:

輸入:x = 120
輸出:21
           

示例 4:

輸入:x = 0
輸出:0
           

提示:

  • -231 <= x <= 231 - 1

class Solution:
    def reverse(self, x: int) -> int:
        a,b = 2 ** 31,0
        if x < 0:
            b = -int(str(-x)[::-1])
        else:
            b = int(str(x)[::-1])
        if b < -a or b > a - 1:
            return 0
        return b

    """
    第二種
    """
    def reverse2(self, x: int) -> int:
        m = 2 ** 31
        flag = False
        if x < 10 and x > -10:
            return x
        if x < 0:
            x = -x
            flag = True
        a = x
        r = ""
        for i in range(32):
            s = a % 10
            a//=10
            if i == 0 and s == 0:
                continue
            r += str(s)
            if a == 0:
                break
        r = -int(r) if flag else int(r)
        if r < -m or r > m - 1:
            return 0
        return r


if __name__ == '__main__':
    b = -123405670
    print(Solution().reverse(b))
           

8. 字元串轉換整數 (atoi)

難度中等1112收藏分享切換為英文接收動态回報

請你來實作一個

myAtoi(string s)

函數,使其能将字元串轉換成一個 32 位有符号整數(類似 C/C++ 中的

atoi

函數)。

函數

myAtoi(string s)

的算法如下:

  • 讀入字元串并丢棄無用的前導空格
  • 檢查下一個字元(假設還未到字元末尾)為正還是負号,讀取該字元(如果有)。 确定最終結果是負數還是正數。 如果兩者都不存在,則假定結果為正。
  • 讀入下一個字元,直到到達下一個非數字字元或到達輸入的結尾。字元串的其餘部分将被忽略。
  • 将前面步驟讀入的這些數字轉換為整數(即,“123” -> 123, “0032” -> 32)。如果沒有讀入數字,則整數為 。必要時更改符号(從步驟 2 開始)。
  • 如果整數數超過 32 位有符号整數範圍

    [−231, 231 − 1]

    ,需要截斷這個整數,使其保持在這個範圍内。具體來說,小于

    −231

    的整數應該被固定為

    −231

    ,大于

    231 − 1

    的整數應該被固定為

    231 − 1

  • 傳回整數作為最終結果。

注意:

  • 本題中的空白字元隻包括空格字元

    ' '

  • 除前導空格或數字後的其餘字元串外,請勿忽略 任何其他字元。

示例 1:

輸入:s = "42"
輸出:42
解釋:加粗的字元串為已經讀入的字元,插入符号是目前讀取的字元。
第 1 步:"42"(目前沒有讀入字元,因為沒有前導空格)
         ^
第 2 步:"42"(目前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
         ^
第 3 步:"42"(讀入 "42")
           ^
解析得到整數 42 。
由于 "42" 在範圍 [-231, 231 - 1] 内,最終結果為 42 。
           

示例 2:

輸入:s = "   -42"
輸出:-42
解釋:
第 1 步:"   -42"(讀入前導空格,但忽視掉)
            ^
第 2 步:"   -42"(讀入 '-' 字元,是以結果應該是負數)
             ^
第 3 步:"   -42"(讀入 "42")
               ^
解析得到整數 -42 。
由于 "-42" 在範圍 [-231, 231 - 1] 内,最終結果為 -42 。
           

示例 3:

輸入:s = "4193 with words"
輸出:4193
解釋:
第 1 步:"4193 with words"(目前沒有讀入字元,因為沒有前導空格)
         ^
第 2 步:"4193 with words"(目前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
         ^
第 3 步:"4193 with words"(讀入 "4193";由于下一個字元不是一個數字,是以讀入停止)
             ^
解析得到整數 4193 。
由于 "4193" 在範圍 [-231, 231 - 1] 内,最終結果為 4193 。
           

示例 4:

輸入:s = "words and 987"
輸出:0
解釋:
第 1 步:"words and 987"(目前沒有讀入字元,因為沒有前導空格)
         ^
第 2 步:"words and 987"(目前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
         ^
第 3 步:"words and 987"(由于目前字元 'w' 不是一個數字,是以讀入停止)
         ^
解析得到整數 0 ,因為沒有讀入任何數字。
由于 0 在範圍 [-231, 231 - 1] 内,最終結果為 0 。
           

示例 5:

輸入:s = "-91283472332"
輸出:-2147483648
解釋:
第 1 步:"-91283472332"(目前沒有讀入字元,因為沒有前導空格)
         ^
第 2 步:"-91283472332"(讀入 '-' 字元,是以結果應該是負數)
          ^
第 3 步:"-91283472332"(讀入 "91283472332")
                     ^
解析得到整數 -91283472332 。
由于 -91283472332 小于範圍 [-231, 231 - 1] 的下界,最終結果被截斷為 -231 = -2147483648 。
           

提示:

  • 0 <= s.length <= 200

  • s

    由英文字母(大寫和小寫)、數字(

    0-9

    )、

    ' '

    '+'

    '-'

    '.'

    組成
class Solution:
    def myAtoi(self, s: str) -> int:
        max_int = 0x7fffffff
        min_int = 0x80000000
        i = 0
        flag = 1
        res = 0
        while i < len(s) and s[i] == " ":
            i+=1
        if i < len(s) and (s[i] == "+" or s[i] == "-"):
            if s[i] == "-":
                flag = -1
            i += 1
        while i < len(s) and s[i].isdigit():
            res = res*10 + int(s[i])
            if flag == 1 and res > max_int:
                return max_int
            if flag == -1 and res > min_int:
                return -min_int
            i+=1
        return res*flag

if __name__ == '__main__':
    s = "-91283472332"
    print(Solution().myAtoi(s))