LeetCode7 整数反转
Posted Zephyr丶J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode7 整数反转相关的知识,希望对你有一定的参考价值。
LeetCode7 整数反转
反转整数的思路很简单,取余除10就完事了,主要是对大数的处理,也就是如何判断越界了。
因为整型范围是-2147483648 <x<2147483647,所以在每次处理之前判断反转的数是否大于了边界数除以10就好了,大于了就说明加上当前余数肯定会超过范围,就直接返回0;小于可以继续,添加后一位并不会超过边界;等于的时候,要看当前余数,是否大于7或者小于-8,但是如果该数满足这个条件了,那说明所给的数就不在整型范围内了,整形范围内的最后一位数只能小于等于2,因此等于和小于一样不用处理。
这个之前做过,也就直接秒了
class Solution {
public int reverse(int x) {
int y = x < 0 ? -x : x;
int res = 0;
while(y > 0){
int temp = y % 10;
if(res > 214748364 || (res == 214748364 && temp > 7))
return 0;
res = res * 10 + temp;
y /= 10;
}
return x < 0 ? -res : res;
}
}
或者也能转换成字符串处理,但是因为题目中有一句话:假设环境不允许存储 64 位整数(有符号或无符号),所以好像不太行
class Solution {
//转换为字符串,再反转的方法
public int reverse(int x) {
if(x == Integer.MIN_VALUE) return 0;//因为该数的绝对值越界了,而且其翻转的结果超过了int范围,这里直接处理
boolean mark = true;//该标记位用来记录x是正数还是负数
if(x < 0) {//如果x是负数,则改变标记位,同时将负数变成正数
mark = false;
x = -x;
}
String str = Integer.toString(x);//正数变成字符串String
StringBuffer stringBuffer = new StringBuffer(str);//字符串String变成StringBuffer
str = stringBuffer.reverse().toString();//StringBuffer翻转在变回字符串String
long result = Long.parseLong(str);//字符串变成长整型,这里为什么用长整型来接收,是因为有很多数已经越界了
if(mark == false) {//如果标记位为负数,则转回负数
result = 0 - result;
}
if(result>Integer.MAX_VALUE || result<Integer.MIN_VALUE) {//如果翻转后的数字超过int类型范围,则返回0
return 0;
}
return (int)result;
}
}
这里突然想到,因为我的代码中要取反,但是MIN_VALUE取反会超过整形的范围,那么应该是多少呢
去查看了一下,MAX_VALUE + 1 = MIN_VALUE
abs(MIN_VALUE)或者 -MIN_VALUE都是MIN_VALUE
记住了
以上是关于LeetCode7 整数反转的主要内容,如果未能解决你的问题,请参考以下文章