7.整数反转Java
题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
输入输出样式
示例1:
输入:x = 123
输出:321
示例2:
输入:x = -123
输出:-321
本题来自LeetCode:https://leetcode-cn.com/problems/reverse-integer/
思路
方法一:每次取输入数字的末尾一个数,依次实现反转。但是要注意溢出问题,因为这里允许32位不能用64位存储的long型。
方法二:利用字符串,将数字转化为字符串,调用字符串reverse方法。同时注意溢出和符号问题。
算法分析
时间复杂度O(log |x|),空间复杂度为O(1)
求解函数
public int reverse(int x) {
int rev = 0;
while (x != 0) {
//溢出则直接返回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;
}
public int reverse(int x) {
// 判断符号,存起来
int op = x>0?1:-1;
x = Math.abs(x);
String s = new StringBuffer(String.valueOf(x)).reverse().toString();
String sMax = String.valueOf(Integer.MAX_VALUE);
int length = sMax.length();
//判断溢出
if(s.length()>=length && s.compareTo(sMax)>0){
return 0;
}
return Integer.valueOf(s) *op;
}