将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。
您在真实的面试中是否遇到过这个题?
Yes
样例
标签
Expand
给定 x = 123
,返回 321
给定 x = -123
,返回 -321
public class Solution {
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int n) {
// Write your code here
int na[] = new int[1000];
if(n==0) return n;
long res = 0;
if(n>0){
int k = 0;
while(n>0){
na[k++] = n%10;
n = n/10;
}
int x = 0;
while(x<k){
res = res*10 + na[x++];
if(res>Integer.MAX_VALUE){
return 0;
}
}
}else if(n<0){
int y = 0-n;
int k = 0;
while(y>0){
na[k++] = y%10;
y = y/10;
}
int x = 0;
while(x<k){
res = res*10 + na[x++];
if(res>Integer.MAX_VALUE){
return 0;
}
}
res = 0-res;
if(res<Integer.MIN_VALUE){return 0;}
}
return (int)res;
}
}
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int n) {
// Write your code here
int na[] = new int[1000];
if(n==0) return n;
long res = 0;
if(n>0){
int k = 0;
while(n>0){
na[k++] = n%10;
n = n/10;
}
int x = 0;
while(x<k){
res = res*10 + na[x++];
if(res>Integer.MAX_VALUE){
return 0;
}
}
}else if(n<0){
int y = 0-n;
int k = 0;
while(y>0){
na[k++] = y%10;
y = y/10;
}
int x = 0;
while(x<k){
res = res*10 + na[x++];
if(res>Integer.MAX_VALUE){
return 0;
}
}
res = 0-res;
if(res<Integer.MIN_VALUE){return 0;}
}
return (int)res;
}
}
优化后的代码
public class Solution {
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int n) {
// Write your code here
if(n==0) return n;
long res = 0;
while(n!=0){
int x = n%10;
res = res*10+x;
while(res>Integer.MAX_VALUE||res<Integer.MIN_VALUE){
return 0;
}
n = n/10;
}
return (int)res;
}
}
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int n) {
// Write your code here
if(n==0) return n;
long res = 0;
while(n!=0){
int x = n%10;
res = res*10+x;
while(res>Integer.MAX_VALUE||res<Integer.MIN_VALUE){
return 0;
}
n = n/10;
}
return (int)res;
}
}