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

LeetCode Reverse Integer:整數反轉邊界條件全覆蓋

     編輯:關於C++

題目回顧

反轉 32 位有符號整數。例:123 → 321,-123 → -321。溢出返回 0。

核心邏輯:逐位提取 + 溢出檢查

class Solution {
public:
    int reverse(int x) {
        long long result = 0; // 用 long long 暫存,防止中間溢出
        const int MAX_INT = 0x7FFFFFFF;
        const int MIN_INT = 0x80000000;
        
        while (x != 0) {
            result = result * 10 + x % 10;
            if (result > MAX_INT || result < MIN_INT) return 0;
            x /= 10;
        }
        return (int)result;
    }
};

關鍵點

  1. 負數處理:C++ % 運算保留符號,-123 % 10 = -3,直接累加即可
  2. 溢出檢查:用 long long 接收中間結果,每步判斷是否超出 [INT_MIN, INT_MAX]
  3. 尾部 0:120 → 21,高位 0 自然被忽略

不使用 long long 的技巧(面試加分)

int reverse(int x) {
    int rev = 0;
    while (x != 0) {
        int pop = x % 10;
        x /= 10;
        // 檢查 rev * 10 + pop 是否溢出
        if (rev > INT_MAX/10 || (rev == INT_MAX/10 && pop > 7)) return 0;
        if (rev < INT_MIN/10 || (rev == INT_MIN/10 && pop < -8)) return 0;
        rev = rev * 10 + pop;
    }
    return rev;
}

總結

看似簡單的題目,考驗對邊界條件的全面考慮:溢出、負數取模、尾部零。面試中先寫 long long 版本保證正確,再優化為 O(1) 空間版本。

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