Simply just modulo the input by 10, add it to a long-integer variable as the result.
Repeat. When the result is > max integer or < min integer, return 0. Hence, return the result as an integer
public class Solution { public int reverse(int x) { long result =0; while(x != 0) { result = (result*10) + (x%10); if(result > Integer.MAX_VALUE) return 0; if(result < Integer.MIN_VALUE) return 0; x = x/10; } return (int)result; } }
It looks like convert to positive number is faster. Mine is 213 ms, yours are 244 ms.
public int reverse(int x) { if (x == Integer.MIN_VALUE) return 0; boolean minus = false; if (x < 0){ x = Math.abs(x); minus = true; } long temp = 0; while(x != 0){ temp *= 10; if (temp > Integer.MAX_VALUE || temp < Integer.MIN_VALUE) return 0; temp += x%10; x /= 10; } if (minus) return (int)(-temp); return (int)temp; }
For another problem, I ran my accepted solution many times and the runtimes ranged from 199 - 229ms, so it's tough to say which solution above is really faster.
hello,i do not anderstand why compare the "result" with Integer.MAX_VALUE and Integer.MIN_VALUE, how about we compare "x" with them in the beginning
i am a java newbie -_-
If I am the interviewer, next question would be, what if input is long?
are you going to use the no maxium value big integer class?
Yes, you're right. But I submitted with my solution and the first solution sometimes, positive is always a little faster.
It's the same result, but the following codes can solve MAXVALUE situation, abs function can't solve MINVALUE.
@zishell 这个问题应该这样理解，输入的数x没有溢出，在反转之后可能会溢出，如Integer.MAXVALUE为2147483647，反转之后是7463847412产生了溢出，所以选择用表示范围比int更大的long类型存储转换之后的结果result。将反转之后的结果result与Integer.MAX_VALUE和Integer.MIN_VALUE作比较，如没有溢出，则将result强制转换为int返回，若有溢出，则返回0.
@ardyadipta Shouldnt this give error as if any integer is > Integer.MAX_VALUE it would itself give a error on the place where result is calculated ? for example lets say when result==Integer.MAX_VALUE so if result+1 it would give integer overflow ?
Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.