LeetCode第7题---整数反转
题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
想法:
反转一个整数,只需要将x取余,然后x除以10,直到最后x/10==0就可以了。
例如:
123
res=0
x取余等于3 res=res*10+3=3 x=123/10=12
x取余等于2 res=res*10+2=32 x=12/10=1
x取余等于1 res=res*10+1=321 x=1/10=0(算法停止)
代码:
class Solution {
/**
* 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
* @param x
* @return
*/
public int reverse(int x) {
//记录结果
int res=0;
/*
* 循环体,反转一个数据,用除法和取余便能实现
*/
while(x!=0){
//题目里说了,计算机只能存下32位的数据
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && x > 7))
return 0;
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && x < -8))
return 0;
res = res * 10 + x % 10;
x /= 10;
}
return res;
}
}
总结:
学习了整数反转的方法,在判断溢出时花费了太多时间。