[LeetCode解題攻略] 7. Reverse Integer

更新於 2024/12/04閱讀時間約 5 分鐘

這篇文章將解析 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

思路分析

反轉整數的核心在於數字位的操作,關鍵點包括:

  1. 符號處理:如果是負數,記得保持反轉後的負號。
  2. 溢出檢查:反轉的結果需要保持在 32 位整數範圍內,否則返回 0。
  3. 去除末尾的零:例如,120 反轉後應為 21

解法一:數字反轉 - 使用數學操作

通過數學操作進行反轉,我們可以逐位將數字取出並重新組合:

步驟:

  1. 記錄數字的正負號,將 x 轉為正數。
  2. 使用一個迴圈逐位取出 x 的最右側數字,並將其添加到 rev 的尾部。
  3. 每次將新數字添加到 rev 時,檢查是否超過 32 位整數範圍。
  4. 如果超過範圍,返回 0;否則,返回 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

複雜度分析

  • 時間複雜度:O(log(x)),因為我們按位操作,x 的位數越多,操作次數越多。
  • 空間複雜度:O(1),只使用了固定的變數。

這種方法效率高且內存使用少,適合大多數情況。


解法二:轉換為字串處理

另一種方法是將整數轉換為字串,利用 Python 的字串反轉功能。這樣可以快速完成反轉,但需要處理符號和末尾零。

步驟:

  1. x 轉換為字串,並去除負號。
  2. 使用字串切片反轉字串。
  3. 如果原數為負數,反轉後加上負號。
  4. 檢查結果是否在範圍內,若不在則返回 0。

實作 (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

複雜度分析

  • 時間複雜度:O(n),n 是整數的位數。
  • 空間複雜度:O(n),需要存儲反轉後的字串。

這種方法簡潔,但佔用較多空間,適合處理 Python 的大整數。


總結

此題主要考察數字處理的基本操作與邊界控制,兩種方法各有優缺點:

  • 數學操作法:效率較高,不需要額外空間。
  • 字串反轉法:簡潔易懂,但空間需求較大。

希望這篇教學能幫助你更好地理解 Reverse Integer 題目的思路與解法!


歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這篇部落格文章將詳細解析 LeetCode 題目 6. Zigzag Conversion。這是一道字串操作題,要求將字串以 "Z" 字形排列,再按行讀取形成新的字串。以下是此題的詳細思路和解法,幫助你有效掌握此類問題。
這篇文章要解說的是 LeetCode 題目 5. Longest Palindromic Substring,這是一道典型的字串題,重點在於找出輸入字串中的最長回文子字串。下面是這篇解題教學的詳細分析與多種解法,讓你能全面掌握這題的技巧。
給定兩個已排序的陣列 nums1 和 nums2,請找到並返回這兩個陣列的中位數。要求時間複雜度為 O(log(min(m, n))),其中 m 和 n 分別是兩個陣列的長度。
給定一個字串 s,請找出其中不含重複字母的最長子字串的長度。
在這篇文章中,我們將深入探討 LeetCode 題目「2. Add Two Numbers」的解法。這道題目考察對鏈結串列 (Linked List) 操作和進位處理的掌握。
在 LeetCode 上,Two Sum 這道題目主要考察如何高效地處理數組和數據查找問題,是面試中常見的問題之一。今天我們將詳細解說這道題目,並提供幾種解題方法。
這篇部落格文章將詳細解析 LeetCode 題目 6. Zigzag Conversion。這是一道字串操作題,要求將字串以 "Z" 字形排列,再按行讀取形成新的字串。以下是此題的詳細思路和解法,幫助你有效掌握此類問題。
這篇文章要解說的是 LeetCode 題目 5. Longest Palindromic Substring,這是一道典型的字串題,重點在於找出輸入字串中的最長回文子字串。下面是這篇解題教學的詳細分析與多種解法,讓你能全面掌握這題的技巧。
給定兩個已排序的陣列 nums1 和 nums2,請找到並返回這兩個陣列的中位數。要求時間複雜度為 O(log(min(m, n))),其中 m 和 n 分別是兩個陣列的長度。
給定一個字串 s,請找出其中不含重複字母的最長子字串的長度。
在這篇文章中,我們將深入探討 LeetCode 題目「2. Add Two Numbers」的解法。這道題目考察對鏈結串列 (Linked List) 操作和進位處理的掌握。
在 LeetCode 上,Two Sum 這道題目主要考察如何高效地處理數組和數據查找問題,是面試中常見的問題之一。今天我們將詳細解說這道題目,並提供幾種解題方法。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
分享一個猜數字的遊戲題目,給予提示讓玩家找出正確的四位數密碼。
Thumbnail
題目敘述: Reverse Bits 給定一個32bit的整數,請逆序翻轉其二進位表達式,輸出翻轉過後的數字。 例如輸入是二進位1010111 逆序翻轉後是 1110101,對應的十進位數值是117 測試範例 Example 1: Input: n = 00000010100101000
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
Thumbnail
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
Thumbnail
題目敘述 題目會給我們一個輸入陣列tokens,裡面以逆序波蘭表達式的方式儲存各個token,請問最後計算完的值是多少? 例如: ["6", "2", "/"] 代表 6 / 2 =3 題目的原文敘述 測試範例 Example 1: Input: tokens = ["2","1"
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
分享一個猜數字的遊戲題目,給予提示讓玩家找出正確的四位數密碼。
Thumbnail
題目敘述: Reverse Bits 給定一個32bit的整數,請逆序翻轉其二進位表達式,輸出翻轉過後的數字。 例如輸入是二進位1010111 逆序翻轉後是 1110101,對應的十進位數值是117 測試範例 Example 1: Input: n = 00000010100101000
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
Thumbnail
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
Thumbnail
題目敘述 題目會給我們一個輸入陣列tokens,裡面以逆序波蘭表達式的方式儲存各個token,請問最後計算完的值是多少? 例如: ["6", "2", "/"] 代表 6 / 2 =3 題目的原文敘述 測試範例 Example 1: Input: tokens = ["2","1"