这是我参与更文挑战的第7天,活动详情查看: 更文挑战
第7天,继续挑战第7题。这题在别的OJ上都有,归类可能是water。也没什么弯弯绕绕,直接10进制按位反过来就好。唯一需要注意的一点是大小超限。
题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
思路
取余得到当前低位数,然后放在答案的高位中。可以用一个中间结果,因为直接放在最高位中需要判断总共有几位,通过辗转乘以10,不停把余数放入中间结果的最低位中,这样随着每一次乘以10,这一位就被一次次推高。判断是否超限这里,参考了网上一些同学的做法后,还是觉得这种最好:中间结果除以10不等于上一个中间结果,那就是溢出了。因为超限之后,数值的正负会被反转,肯定不会是等于上一个中间结果。当然另外还有1种思路是用char数组存然后反过来,那有以下几个注意点:1、正负;2、前导0;3、同样需要考虑超限的问题。
Java版本代码
class Solution {
public int reverse(int x) {
int ans = 0;
while (x != 0) {
int last = x % 10;
int result = ans * 10 + last;
// 这一步用来判断是否溢出,比较巧妙
if (result / 10 != ans) {
return 0;
}
ans = result;
x = x / 10;
}
return ans;
}
}