题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
思路:分x正数与负数两种情况,将数字转化为字符串之后,再将字符串转换为字符数组,然后对字符串进行反转,反转完成倒回数字,并判断数字是否溢出
个人解法(java):
class Solution {
public int reverse(int x) {
int result = 0;
if(x >= 0) {
//数字转化为字符串
String s = String.valueOf(x);
//字符串反转
String s1 = reverse1(s);
//字符串转化为数字并判断是否溢出
try{
result = Integer.valueOf(s1);
}catch(Exception e) {
return 0;
}
}
else {
String s = String.valueOf(-x);
String s1 = reverse1(s);
try{
result = -Integer.valueOf(s1);
}catch(Exception e) {
return 0;
}
}
return result;
}
public String reverse1(String s) {
//字符串转化为字符数组
char[] arr = s.toCharArray();
for(int j = 0; j < s.length() / 2; j++) {
char temp;
temp = arr[j];
arr[j]= arr[s.length() - j - 1];
arr[s.length() - j - 1] = temp;
}
String s1 = Arrays.toString(arr).replaceAll("[\\[\\]\\s,]", "");
return s1;
}
}
较优解法(来自leetcode):
思路:倒转数字,先判断是否溢出,然后每次x的最低位数,作为新数ans较低位数添加在ans上,原ans乘10向前增大数字,x除以10去掉最低位数
public int reverse(int x) {
int ans = 0;
while (x != 0) {
//判断是否溢出
if ((ans * 10) / 10 != ans) {
ans = 0;
break;
}
//主要步骤
ans = ans * 10 + x % 10;
x = x / 10;
}
return ans;
}
官方解法:
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}