7_整数反转
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;
}