题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例1:
输入: 123 输出: 321
示例2:
输入: -123 输出: -321
示例3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路
1.可以循环取整数的尾部,然后将其乘上权值后加到一起。
2.可以通过当前总数和当前取出来的尾部来判断数字是否溢出。
Java代码实现
public static int reverse(int x) {
int sum = 0;
while(x!=0){
int tail = x%10;
x = x/10;
//
if(sum > Integer.MAX_VALUE/10 || (sum == Integer.MAX_VALUE/10 && tail == 7))
return 0;
if(sum < Integer.MIN_VALUE/10 || (sum == Integer.MIN_VALUE/10 && tail == -8))
return 0;
sum = sum*10 + tail;
}
return sum;
}Golang代码实现
func reverse(x int) int {
res := 0
for x != 0 {
tail := x%10
if res > math.MaxInt32/10 || (res == math.MaxInt32/10 && tail > 7) {
return 0
}
if res < math.MinInt32/10 || (res == math.MinInt32/10 && tail < -8) {
return 0
}
res = res*10 + tail
x = x/10
}
return res
}
京公网安备 11010502036488号