题目:
给定一个范围为 32 位 int 的整数,将其颠倒。
例 1:
输入: 123
输出: 321
例 2:
输入: -123
输出: -321
例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。
思路:
除10取余就可以得到最低位,除以10使倒数第二低位移到最低位。这道题的需要注意的是颠倒结果不在int范围内的情况。用long存储结果,方便进行比较。
代码
class Solution {
public int reverse(int x) {
int flag = 1;
if(x < 0) flag = -1;
int value = flag * x;
int[] nums = new int[10];
int i = 0;
int tmp = value;
//获取x的各位上的数字,存到数组里
while(tmp > 0) {
nums[i++] = tmp % 10;
tmp /= 10;
}
long ans = 0;
int j = 0;
while(j < i) {
ans = ans * 10 + nums[j++];
}
//判断范围
if(flag == 1 && ans > ((1L << 31) - 1))
return 0;
if(flag == -1 && ans > (1L << 31))
return 0;
return (int)ans * flag;
}
}
网友评论