题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
示例 1:
输入 | 输出 |
---|---|
x=123 | 321 |
示例 2:
输入 | 输出 |
---|---|
x=-123 | -321 |
示例 3:
输入 | 输出 |
---|---|
x=-210 | 21 |
示例 4:
输入 | 输出 |
---|---|
x=-0 | 0 |
提示:
-231 <= x <= 231 - 1
本题一开始我的解题思路,就是直接暴力出来将输入的数字转化为String类型的数字然后再结合循环以及CharAt方法进行位置交换,代码如下:
class Solution {
public int reverse(int x) {
int c=1;
int result=0;
if (x>=0){
String s=String.valueOf(x);
int lenth = s.length();
for (int a =0;a<=lenth-1;a++){
char number =s.charAt(a);
int b =Integer.parseInt(String.valueOf(number));
int q=b*c;
result+=q;
c=c*10;
}
return result;
}else {
x=x*-1;
String p=String.valueOf(x);
int lenth = p.length();
for (int a =0;a<=lenth-1;a++){
char number =p.charAt(a);
int b =Integer.parseInt(String.valueOf(number));
int q=b*c;
result+=q;
c=c*10;
}
return result*-1;
}
}
}
但是可以由下图看出大部分测试用例是通过了的,但是有特殊的用例没有通过再结合题意得出对于输入超过x范围的数没有去进行处理,且用这种方法太麻烦了,所以选择放弃该种方法。
力扣官方解题视频及思路
根据力扣提供的方法将代码优化:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int x=scanner.nextInt();
System.out.println(reverse(x));
}
public static int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
}