Leetcode 7实现整数的反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2 ^31, 2 ^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例一:
输入:x = 123
输出:321
示例二:
输入:x = -123
输出:-321
示例三:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
解法一:逆序输出(暴力解法)
public int reverse(int x){
//解决边界问题
// 整数类型的最小值的绝对值 比 最大值的绝对值 大1
if (x==Integer.MAX_VALUE||x==Integer.MIN_VALUE){
return 0;
}
//解决符号问题
//无论正负,均视为正数
int sign = x > 0 ? 1 : -1;
x = x < 0 ? -x : x;
//整数数转字符串
String str = String.valueOf(x);
//字符串转字符数组
char[] chars = str.toCharArray();
//遍历字符数组,并将元素存储到新数组中
int len = chars.length;
char[] array = new char[len];
for(int i=0;i<len;i++){
array[i] = chars[len-i-1];
}
//将新数组转换为字符串,再转换成整数输出
long value = Long.valueOf(String.valueOf(array));
boolean b = value > Integer.MAX_VALUE||value < Integer.MIN_VALUE;
int result = b ? 0 :(int)value;
return result = result*sign;
}
解法二:首尾交换
public int reverse(int x){
if(x == Integer.MAX_VALUE ||x == Integer.MIN_VALUE){
return 0;
}
int sign = x > 0 ? 1 : -1;
x = x < 0 ? -x : x;
String str = String.valueOf(x);
char[] chars = str.toCharArray();
int start = 0,end = chars.length-1 ;
// 交换首位(start)和末位(end)数字
// 循环操作:依次交换第二(start++)和倒数第二个(end--)
//交换两端等距离的元素
while(start < end){
//
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
long value = Long.valueOf(String.valueOf(chars));
boolean b = value > Integer.MAX_VALUE||value < Integer.MIN_VALUE;
int result = b ? 0 :(int)value;
return result = result*sign;
}
解法三:数学思维
public int reverse(int x){
if(x == Integer.MAX_VALUE || x == Integer.MIN_VALUE){
return 0;
}
int sign = x < 0 ? -1 : 1;
x = x < 0 ? -x : x;
int result