首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 7 Reverse Integer:整數反轉的溢出處理藝術

     編輯:關於C++

題目要求

給定 32 位有符號整數 x,反轉其數字部分。反轉後超出 [-2³¹, 2³¹-1] 返回 0。
例:123 → 321, -123 → -321, 120 → 21。

關鍵難點:溢出檢測

直接用 rev = rev * 10 + pop 可能在乘法或加法時溢出。需在操作前預判:

  • 若 rev > INT_MAX/10,乘 10 必溢出。
  • 若 rev == INT_MAX/10 且 pop > 7,加法溢出(因 INT_MAX 末位為 7)。
  • 負數同理,用 INT_MIN 判斷。

優雅實現(Java)

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}

Python 實現(利用長整數)

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

複雜度

  • 時間:O(log|x|),位數循環。
  • 空間:O(1)。

總結

本題考察邊界條件處理能力。核心技巧是預判溢出而非事後檢測,這在系統級編程中至關重要。面試時能寫出無分支、無長整數依賴的 C/Java 版本會大加分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved