给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
利用字符串解决,先上代码
public int reverse(int x) {
String str = Integer.toString(x);
int z = 0;
if (str.indexOf("-") != 0) {
StringBuffer str1 = new StringBuffer(str);
StringBuffer y = str1.reverse();
String y1 = y.toString();
long zzz = Long.valueOf(y1);
if (zzz <= Math.pow(2, 31)) {
z =(int)zzz;
}
} else {
StringBuffer str2 = new StringBuffer(str);
StringBuffer y = str2.replace(0, 1, "");
y = y.reverse();
String y1 = y.toString();
long zz = Long.valueOf(y1);
if (zz < Math.pow(2, 31)) {
z =(int)zz * (-1);
}
}
return z;
}
// -123 123 321 -321
解决思路:
先想着将整数转换成string型然后利用reverse方法进行反转。
判断—>反转—>转成long型(如果转成int可能会越界)
1.先判断该整数是正数还是负数,负数的话要在最后乘个-1
2.利用reverse()方法将字符串进行反转
3.转成long型
4.判断long型的值是否超出了整型的范围
数学方法解决
public int reverse(int x) {
/**
* 1.先缕清思路 2.反转要做的是什么 3.eg:x=123; 思路:利用%求出个位,第一次是3 求出的个位每次*10 + 下一次求出的个位
* 遇到的第一个问题:初始值 rev = 0
*
*/
long rev = 0;
final int MAX = Integer.MAX_VALUE;
final int MIN = Integer.MIN_VALUE;
while (x != 0) {
rev = rev * 10 + x % 10;
x = x / 10;
}
// return (((int) rev) != rev) ? 0 : (int) rev;
return (int) rev > MAX || (int) rev < MIN ? 0 : (int) rev;
}
注意范围问题就没什么了,还有就是思路,刚开始没想法到这个方法。
请各位大佬指出我的错误,小白求指教,您指出一个问题我就进步一丢丢,谢谢