版权声明:本文为博主原创文章,未经博主允许不得转载。
难度:容易
要求:
将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。
样例
给定 x = 123,返回 321
给定 x = -123,返回 -321
思路:
通过对数字模十取余得到它的最低位。其实本题考查的是整数相加的溢出处理,检查溢出有这么几种办法:
- 两个正数数相加得到负数,或者两个负数相加得到正数,但某些编译器溢出优化的方式不一样
- 对于正数,如果最大整数减去一个数小于另一个数,或者对于负数,最小整数减去一个数大于另一个数,则溢出。这是用减法来避免加法的溢出。
- 使用long来保存可能溢出的结果,再与最大/最小整数相比较
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int x) {
long result = 0;
int tmp = Math.abs(x);
while (tmp > 0) {
result *= 10;
result += tmp % 10;
if (result > Integer.MAX_VALUE) {
return 0;
}
tmp /= 10;
}
return (int) (x >= 0 ? result : -result);
}
思路:
先将数字转化为字符串,然后将字符串倒序输出,并转回数字。记得需要去除首部多余的0。