7. 整数反转
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
代码
1、经典边界法
///经典边界法
// Integer.MIN_VALUE = -2147483648; Integer.MAX_VALUE= 2147483647
//C++的int max=2147483647 int min=-2147483648
class Solution {
public int reverse(int x) {
int res = 0;
while(x != 0){
int y = x % 10;
x = x / 10;
if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && y > 7)){
return 0;
}
if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && y < -8)){
return 0;
}
res = res * 10 + y;
}
return res;
}
}
2、取巧用long法,不合题意
//取巧用long法,不合题意
class Solution {
public int reverse(int x) {
long n = 0;
while (x != 0) {
n = n * 10 + x % 10;
x = x / 10;
}
return (int)n == n ? (int)n:0;
}
}
3、队列法,未实现
队列法,未实现
class Solution {
public int reverse(int x) {
int flag = 1;
if(x < 0){
x = -x;
flag = -1;
}
int res = 0;
// Stack<Integer> stack = new Stack<>();
Queue<Integer> queue = new LinkedList<>();
while(x != 0){
int y = x % 10;
// stack.push(y);
queue.offer(y);
x = x/10;
}
while(queue.peek() != null){
res += queue.peek() + res * 10;
queue.poll();
}
// while(!queue.empty()){
// res += queue.peek() + res * 10;
// stack.poll();
// }
return res;
}
}