LeetCode7.整数反转
2021-07-11 本文已影响0人
Timmy_zzh
1.题目描述
- 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
2.解题思路
-
要将整数进行反转,可以先将整数转换成字符串,接着字符串转换为字符数组,对字符数组中的元素进行前后元素的调换
- 元素调换可以使用一个新数组进行保存
- 也可以在原数组中进行元素交换
- 元素交换后的字符数组,转换成字符串,然后字符串通过Integer.valueof()方法转换成整数
- 通过数学思维不断获取整数的最低位,并将最低位添加到结果中
-
边界和细节问题
- 字符串遍历数组越界控制
- 符号问题
- 转换过程中整数范围越界问题处理
-
解法一:
public int reverse_v1(int x) {
if (x == Integer.MIN_VALUE) {
return 0;
}
//保存符号标记,最后返回时使用
int sign = x > 0 ? 1 : -1;
//负数情况,转换成正数处理
x = x * sign;
String val = String.valueOf(x);
char[] chars = val.toCharArray();
int len = chars.length;
char[] newCh = new char[len];
for (int i = 0; i < len; i++) {
newCh[i] = chars[len - 1 - i];
}
String reverseVal = String.valueOf(newCh);
long result = Long.valueOf(reverseVal);
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
return 0;
}
return (int) (result * sign);
}
- 解法二
public int reverse_v2(int x) {
if (x == Integer.MIN_VALUE) {
return 0;
}
int sign = x > 0 ? 1 : -1;
x = x * sign;
String val = String.valueOf(x);
char[] chars = val.toCharArray();
int len = chars.length;
for (int start = 0, end = len - 1; start < len / 2; start++, end--) {
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
}
String reverseVal = String.valueOf(chars);
long result = Long.valueOf(reverseVal);
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
return 0;
}
return (int) (result * sign);
}
- 解法三
public int reverse(int x) {
if (x == Integer.MIN_VALUE) {
return 0;
}
int sign = x > 0 ? 1 : -1;
x = x * sign;
long result = 0;
int last = 0;
while ((last = x % 10) != x) {
//获取个位数
result = result * 10 + last;
x = x / 10;
}
result = result * 10 + last; //最高位数字处理
if (result > Integer.MAX_VALUE) {
return 0;
}
return (int) (result * sign);
}
3.总结
- 解法总结
- 根据题目要求要将整数的数字进行反转,可以先将整数转换成字符串,再将字符串转换成字符数组,然后对字符数组的元素进行交换
- 还可以使用数学思维,不断获取整数的个位数
- 边界和细节处理:符号处理,与整数范围问题处理
- 数组知识总结:
- 数组是一个固定大小的数据结构,且数组中所有元素在内存的地址是连续的
- 可以通过数组下标随机获取对应元素