难度简单2956收藏分享切换为英文接收动态反馈
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0
提示:
- -231 <= x <= 231 - 1
class Solution {
public int reverse(int x) {
// 如果超出范围直接返回0
int min = -(1 << 31);
int max = (1 << 31) - 1;
if(x == 0){
System.out.print(0);
return 0;
}
// 创建返回的StringBuffer,因为要经常修改,所以使用StringBuffer效果比较好。
StringBuffer result = new StringBuffer();
// 将int转化为char类型的数组
char[] chars = String.valueOf(x).toCharArray();
boolean flag = true;
// 不管正负,直接逆序先录入进去。原因如下:
// 1.如果是正数:那么就会出现1000000这种情况,倒序以后是0000001,所以前面的0要排除。
// 2.如果是负数,那么就会出现-100000这种情况,倒序以后是000001-,在最开头的0和负号之间必定有常数,所以可以直接录入。
// 3.0已经被排除了,所以最后一位数字不需要特别处理。必定会有内容被录入。
for (int i = chars.length - 1; i >= 0; --i) {
if (flag && chars[i] == '0') {
continue;
}
flag = false;
result.append(chars[i]);
}
// 最后一步要做的就是改变负号的位置,先删除末尾的负号,再在最前面加上负号。
if(result.indexOf("-") != -1) {
result.delete(result.length() - 1, result.length());
result.insert(0, "-");
}
if(Long.parseLong(result.toString()) < min || Long.parseLong(result.toString()) > max){
System.out.println(0);
return 0;
}
System.out.println(result);
return Integer.parseInt(result.toString());
}
}



