实现整数的数字翻转
2021-06-22 本文已影响0人
段段小胖砸
题目:(力扣第7题)
image.png
思路,整数转换为字符串再转化为char数组
方案一:逆序输出(暴力破解)
数据结构:字符数组
算法思维:遍历
public int reverse(int x) {
if (x == Integer.MIN_VALUE || x == Integer.MAX_VALUE) {
return 0;
}
int sign = x > 0 ? 1 : -1;
x = x < 0 ? -x : x;
//整数转字符串, 再转字符数组
String s = String.valueOf(x);
char[] chars = s.toCharArray();
//反向遍历字符数组,并将元素存储到新数组中
int len = chars.length;
char[] array = new char[len];
for (int i = len - 1; i >= 0; i--) {
array[len - 1 - i] = chars[i];
}
//将新数组转成字符串,再转成整数输出
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*sign;
}
方案二:首尾交换
数据结构:字符数组
算法思维:遍历
public int reverse(int x) {
//整数类型的最小值绝对值比最大值的绝对值大1
if (x == Integer.MIN_VALUE || x == Integer.MAX_VALUE) {
return 0;
}
int sign = x > 0 ? 1 : -1;
x = x < 0 ? -x : x;
//整数转字符串, 再转字符数组
String s = String.valueOf(x);
char[] chars = s.toCharArray();
//交换首位和末位数字
//循环操作,交换首位++和末位--(循环结束start>end,奇数个;start=end,偶数)
int start = 0;
int end = chars.length - 1;
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 * sign;
}