一、题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
链接:leetcode-cn.com/problems/re…
二、思路分析
- 由题意得,根据%取模操作符和/操作符很容易就得出,对于一个整数的操作
① 将123 % 10 得到3,再将123 / 10
② 将12 % 10 得到2,再将12 / 10
③ 将1 % 10 得到1,再将1 / 10
class Solution {
public int reverse(int x) {
int target = 0;
while(x != 0) {
target = target * 10 + x % 10;
x /= 10;
}
return target;
}
}
- 但是对于这个题目而言,要求我们最大的整数不能超过2147483647,2147483646这个数组翻转过来后,int类型将会产生溢出的情况,所以要考虑排除这种大数的条件。 ① 找出条件 ② 对比这个数是否发生溢出(即与原来进行比较,看看是否发生变化,如果没有变,则说明没有溢出)
三、答案
class Solution {
public int reverse(int x) {
int res = 0;
int last = 0;
while(x!=0) {
int tmp = x%10;
last = res;
res = res*10 + tmp;
//判断整数溢出
if(last != res/10)
{
return 0;
}
x /= 10;
}
return res;
}
}
class Solution {
public int reverse(int x) {
int res = 0;
while(x!=0) {
//每次取末尾数字
int tmp = x%10;
//判断是否 大于 最大32位整数
if (res>214748364 || (res==214748364 && tmp>7)) {
return 0;
}
//判断是否 小于 最小32位整数
if (res<-214748364 || (res==-214748364 && tmp<-8)) {
return 0;
}
res = res*10 + tmp;
x /= 10;
}
return res;
}
}