這篇文章將解析 LeetCode 題目 7. Reverse Integer,這是一道簡單但容易出錯的數字操作題。題目要求將一個整數反轉後返回,並需考慮邊界條件和溢出情況。讓我們逐步解題,並討論不同的解法。
給定一個 32 位整數 x
,要求返回將 x
中的數字反轉後的結果。如果反轉後的數字超出 32 位整數的範圍 [-2^31, 2^31 - 1]
,則返回 0。
示例:
Input: x = 123
Output: 321
Input: x = -123
Output: -321
Input: x = 120
Output: 21
Input: x = 0
Output: 0
反轉整數的核心在於數字位的操作,關鍵點包括:
120
反轉後應為 21
。通過數學操作進行反轉,我們可以逐位將數字取出並重新組合:
步驟:
x
轉為正數。x
的最右側數字,並將其添加到 rev
的尾部。rev
時,檢查是否超過 32 位整數範圍。rev
的結果。實作 (Python):
class Solution:
def reverse(self, x: int) -> int:
INT_MAX, INT_MIN = 2**31 - 1, -2**31
rev = 0
sign = -1 if x < 0 else 1
x = abs(x)
while x != 0:
pop = x % 10
x //= 10
# 檢查是否會溢出
if rev > (INT_MAX - pop) // 10:
return 0
rev = rev * 10 + pop
return sign * rev
複雜度分析
這種方法效率高且內存使用少,適合大多數情況。
另一種方法是將整數轉換為字串,利用 Python 的字串反轉功能。這樣可以快速完成反轉,但需要處理符號和末尾零。
步驟:
x
轉換為字串,並去除負號。實作 (Python):
class Solution:
def reverse(self, x: int) -> int:
INT_MAX, INT_MIN = 2**31 - 1, -2**31
sign = -1 if x < 0 else 1
rev_str = str(abs(x))[::-1]
rev = int(rev_str) * sign
if rev < INT_MIN or rev > INT_MAX:
return 0
return rev
複雜度分析
n
是整數的位數。這種方法簡潔,但佔用較多空間,適合處理 Python 的大整數。
此題主要考察數字處理的基本操作與邊界控制,兩種方法各有優缺點:
希望這篇教學能幫助你更好地理解 Reverse Integer 題目的思路與解法!