7_整数反转

zeta186012 / 2024-09-01 / 原文

7_整数反转

【问题描述】

给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−231, 231 − 1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。

示例:
输入:x = 123
输出:321

【算法设计思想】

本题主要是条件限制,即不允许超过32位有符号整数的范围,我们使用INT_MAX和INT_MIN来进行记录就好了。主要是如何将一个数字反转呢?这里我们要记住这段关键的代码

bool reverse(int x){
  int rev = 0;
  while(x){
    rev = rev * 10 + x % 10;
    x = x / 10;
    }
  return rev;
}

【算法描述】

C++:

class Solution{
    public:
        int reverse(int x){
            int rev = 0;
            while(x){
                if(rev > 0 && rev < (INT_MAX - x % 10) / 10) return 0;
                if(rev < 0 && rev > (INT_MIN - x % 10) / 10) return 0;
                rev = rev * 10 + x % 10;
                x = x / 10;
            }
            return rev;
        }
};

Java:

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

Python:

class Solution:
    def reverse(self, x: int) -> int:
        INT_MAX = 2**31 - 1
        INT_MIN = -(2**31)
        rev = 0
        sign = 0
        if x > 0:
            sign = 1
        if x < 0:
            sign = -1
        x = abs(x)
        pop = x % 10
        while x != 0:
            if x > 0 and rev > (INT_MAX - pop) // 10:
                return 0
            rev = rev * 10 + x % 10
            x = x // 10
        return rev * sign


C语言:

int reverse(int x) {
    int rev = 0;
    int MAX = 2147483647;
    int MIN = -2147483648;
    while (x) {
        if (x > 0 && rev > (MAX - x % 10) / 10)
            return 0;
        if (x < 0 && rev < (MIN - x % 10) / 10)
            return 0;
        rev = rev * 10 + x % 10;
        x = x / 10;
    }
    return rev;
}