Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123 Output: 321
Example 2:
Input: -123 Output: -321
Example 3:
Input: 120 Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
牛人答案1:
public int reverse(int x)
{
int result = 0; while (x != 0) { int tail = x % 10; int newResult = result * 10 + tail; if ((newResult - tail) / 10 != result) { return 0; } result = newResult; x = x / 10; } return result; }
答案2:
class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
if (java.lang.Math.abs(res) > Integer.MAX_VALUE / 10) return 0;// 2^31 = 2147483648, so no matter -2^31 or 2^31-1, the reverse of absolute value is bigger than Integer.MAX_VALUE.
res = res * 10 + x % 10;
x /= 10;
}
return res;
}
}
Python3:
class Solution: def reverse(self, x: int) -> int: s = (x > 0) - (x < 0) # True - False = 1, False - True = -1 r = int(str(x*s)[::-1]) #[::-1] means reverse. Firstly convert number to string and reverse, then cast back to int. While casting to integer, if there's prefix '0', the casting can still go through and cut '0'. return s*r * (r < 2**31) #Number * True = Number * 1, * False = * 0
https://stackoverflow.com/questions/509211/understanding-slice-notation
Slice notation.