貌似这次没啥前言,,有的就是这道题比较简单….
给定一个 32 位有符号整数,
将整数中的数字进行反转。
示例1
输入: 123
输出: 321
示例2
输入: -123
输出: -321
示例3
输入: 120
输出: 21
注意
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
这道题还是比较简单的,在leetcode的定位属于简单级别。需要处理的点只有两个,一个是把数字反转,一个是判断是否溢出。
数字反转我猜大家玩c的时候都弄过,就不多加说明了。
不过那个判断溢出的,我是用一个long类型的变量来存放反转后的数,然后再来进行比较的。
直接上代码:
public int reverse(int x) {
//标记正负数
boolean flag = false;
//存放反转后的数
long y = 0;
if(x < 0){
flag = true;
x = -x;
}
//进行反转
while(x > 0){
y = y * 10 + x % 10;
x = x / 10;
}
if(flag)
y = -y;
if(y > Math.pow(2,31) - 1 || y < Math.pow(-2,31)){
return 0;
}else{
return (int)y;
}
}
假如你是用java做的,不知道你有没这种想法:
就是通过把数字转换为字符串,然后再把字符串转换为int类型。这种做法我觉得不大友好,因为对于末尾的0本来我们是要弃掉的,它也会被转换过来,而且这种做法的时间复杂度和空间复杂度都更高。
假如你们有更加优雅的做法,欢迎指点出来。我创建了一个leetcode的讨论群,如果你想进,可以加我微信(公号右下方有我的微信),备注“leetcode”,我拉你进群,不过,貌似这群有点不活跃,哈哈,可能是我没有带动大家….