7. 整数反转
难度简单2715收藏分享切换为英文接收动态反馈
给你一个 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
通过次数659,655
提交次数1,884,119
Given a signed 32-bit integer x
, return x
with its digits reversed. If reversing x
causes the value to go outside the signed 32-bit integer range [-231, 231 - 1]
, then return 0
.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
Example 1:
Input: x = 123
Output: 321
Example 2:
Input: x = -123
Output: -321
Example 3:
Input: x = 120
Output: 21
Example 4:
Input: x = 0
Output: 0
Constraints:
-231 <= x <= 231 - 1
解法1:变成字符串,倒序提取放入stringbuffer,输出。
public int reverse(int x) {
int result = 0;
String value = String.valueOf(x);
StringBuilder sb = new StringBuilder();
if (value.charAt(0) == '-') {
sb.append('-');
value = value.substring(1);
}
for (int i = value.length() - 1; i >= 0; i--) {
sb.append(value.charAt(i));
}
try {
result = Integer.valueOf(sb.toString());
} catch (Exception e) {
}
return result;
}
解法2:res = res * 10 + x % 10;
class Solution {
public static int reverse(int x) {
boolean neg = ((x >>> 31) & 1) == 1;//符号位判断
x = neg ? x : -x;//全部转成负数处理
int m = Integer.MIN_VALUE / 10;
int o = Integer.MIN_VALUE % 10;
int res = 0;
while (x != 0) {
if (res < m || (res == m && x % 10 < o)) {//有效数判断
return 0;
}
res = res * 10 + x % 10;
x /= 10;
}
return neg ? res : Math.abs(res);
}
}