一、今日刷题
1. 第三部分:数与位 – 7. 整数反转
跳转LeetCode
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [?2^31, 2^31 ? 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321 示例 2:
输入:x = -123 输出:-321 示例 3:
输入:x = 120 输出:21
答案代码:
①弹出:(弹出 x 的末尾数字 digit)
digit = x % 10
x /= 10
②推入:(将数字 digit 推入 rev 末尾)
rev = rev * 10 + digit
学习题解里的数学推倒过程,精彩。
根据题意,反转后的整数不能超过32 位有符号整数的范围, 但是题目要求不允许使用 6464 位整数,即运算过程中的数字必须在 3232 位有符号整数的范围内,因此我们不能直接按照上述式子计算,需要另寻他路。
最终得到的不等式: 向最终反转结果rev中推入digit前判断
package Number;
public class Reverse {
public static void main(String[] args) {
Reverse reverse = new Reverse();
int ans = reverse.reverse(-123);
System.out.println(ans);
}
public int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
}
|