Study Plan For Algorithms - Part4

WindMay發表於2024-08-18

1. 整數反轉
題目連結:https://leetcode.cn/problems/reverse-integer/
給定一個 32 位的有符號整數 x ,返回將 x 中的數字部分反轉後的結果。
如果反轉後整數超過 32 位的有符號整數的範圍 [−2^31, 2^31 − 1] ,就返回 0。

class Solution:
    def reverse(self, x: int) -> int:
        sign = 1 if x >= 0 else -1
        x = abs(x)
        reversed_x = 0
        while x > 0:
            reversed_x = reversed_x * 10 + x % 10
            x //= 10
        reversed_x *= sign
        if reversed_x < -2**31 or reversed_x > 2**31 - 1:
            return 0
        return reversed_x

2. 字串轉換整數
題目連結:https://leetcode.cn/problems/string-to-integer-atoi/
請實現一個 myAtoi(string s) 函式,使其能將字串轉換成一個 32 位有符號整數。

函式 myAtoi(string s) 的演算法如下:
空格:讀入字串並丟棄無用的前導空格(" ")
符號:檢查下一個字元(假設還未到字元末尾)為 '-' 還是 '+'。如果兩者都不存在,則假定結果為正。
轉換:透過跳過前置零來讀取該整數,直到遇到非數字字元或到達字串的結尾。如果沒有讀取數字,則結果為0。
舍入:如果整數數超過 32 位有符號整數範圍 [−2^31, 2^31 − 1] ,需要截斷這個整數,使其保持在這個範圍內。具體來說,小於 −2^31 的整數應該被舍入為 −2^31 ,大於 2^31 − 1 的整數應該被舍入為 2^31 − 1 。

返回整數作為最終結果。

class Solution:
    def myAtoi(self, s: str) -> int:
        s = s.strip() 
        sign = 1  
        if s and (s[0] == '-' or s[0] == '+'): 
            if s[0] == '-':
                sign = -1
            s = s[1:]
        num = 0
        for c in s:
            if c.isdigit(): 
                num = num * 10 + int(c)
            else:
                break
        num *= sign

        if num < -2**31:
            return -2**31
        elif num > 2**31 - 1:
            return 2**31 - 1
        return num

相關文章