题目描述 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [$−2^{31}, 2^{31} − 1$] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0
提示:
$-2^{31} <= x <= 2^{31} - 1$
解决方法 C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <limits> class Solution {public : int reverse (int x) { int maximum = std::numeric_limits<int >::max (); int minimum = std::numeric_limits<int >::min (); int sign = (x < 0 ) ? -1 : 1 ; x = abs (x); long long reversed_num = 0 ; while (x != 0 ) { int pop = x % 10 ; x /= 10 ; reversed_num = reversed_num * 10 + pop; if (reversed_num > maximum || reversed_num < minimum) { return 0 ; } } return sign * reversed_num; } };
结果 执行用时 : 0 ms, 击败 100.00% 使用 C++ 的用户
内存消耗 : 6.39 MB, 击败 23.92% 使用 C++ 的用户
Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Solution { public int reverse (int x) { int MAX_VALUE = Integer.MAX_VALUE; int MIN_VALUE = Integer.MIN_VALUE; int sign = (x < 0 ) ? -1 : 1 ; x = Math.abs(x); long reversedNum = 0 ; while (x != 0 ) { int pop = x % 10 ; x /= 10 ; reversedNum = reversedNum * 10 + pop; if (reversedNum > MAX_VALUE || reversedNum < MIN_VALUE) { return 0 ; } } return (int ) (sign * reversedNum); } }
结果 执行用时 : 1 ms, 击败 47.24% 使用 Java 的用户
内存消耗 : 39.78 MB, 击败 5.22% 使用 Java 的用户
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Solution (object ): def reverse (self, x ): INT_MAX = 2 **31 - 1 INT_MIN = -2 **31 sign = -1 if x < 0 else 1 x = abs (x) reversed_num = 0 while x != 0 : pop = x % 10 x //= 10 if reversed_num > INT_MAX // 10 or (reversed_num == INT_MAX // 10 and pop > 7 ): return 0 if reversed_num < INT_MIN // 10 or (reversed_num == INT_MIN // 10 and pop < -8 ): return 0 reversed_num = reversed_num * 10 + pop return sign * reversed_num
结果 执行用时 : 28 ms, 击败 42.98% 使用 Python 的用户
内存消耗 : 13.20 MB, 击败 5.80% 使用 Python 的用户
Python3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Solution : def reverse (self, x: int ) -> int : INT_MAX = 2 **31 - 1 INT_MIN = -2 **31 sign = -1 if x < 0 else 1 x = abs (x) reversed_num = 0 while x != 0 : pop = x % 10 x //= 10 if reversed_num > INT_MAX // 10 or (reversed_num == INT_MAX // 10 and pop > 7 ): return 0 if reversed_num < INT_MIN // 10 or (reversed_num == INT_MIN // 10 and pop < -8 ): return 0 reversed_num = reversed_num * 10 + pop return sign * reversed_num
结果 执行用时 : 32 ms, 击败 98.79% 使用 Python3 的用户
内存消耗 : 16.86 MB, 击败 5.02% 使用 Python3 的用户
C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 int reverse (int x) { int reversed = 0 ; int upper_limit = INT_MAX / 10 ; int lower_limit = INT_MIN / 10 ; while (x != 0 ) { int digit = x % 10 ; x /= 10 ; if (reversed > upper_limit || (reversed == upper_limit && digit > 7 )) { return 0 ; } if (reversed < lower_limit || (reversed == lower_limit && digit < -8 )) { return 0 ; } reversed = reversed * 10 + digit; } return reversed; }
结果 执行用时 : 0 ms, 击败 100.00% 使用 C 的用户
内存消耗 : 6.21 MB, 击败 50.59% 使用 C 的用户
C# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Solution { public int Reverse (int x ) { int reversed = 0 ; while (x != 0 ) { int digit = x % 10 ; x /= 10 ; if (reversed > int .MaxValue / 10 || (reversed == int .MaxValue / 10 && digit > 7 )) { return 0 ; } if (reversed < int .MinValue / 10 || (reversed == int .MinValue / 10 && digit < -8 )) { return 0 ; } reversed = reversed * 10 + digit; } return reversed; } }
结果 执行用时 : 20 ms, 击败 89.43% 使用 C# 的用户
内存消耗 : 25.87 MB, 击败 95.35% 使用 C# 的用户
JavaScript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 var reverse = function (x ) { let reversed = 0 ; const INT_MAX = Math .pow (2 , 31 ) - 1 ; const INT_MIN = -Math .pow (2 , 31 ); while (x !== 0 ) { const digit = x % 10 ; x = Math .trunc (x / 10 ); if (reversed > INT_MAX / 10 || (reversed === INT_MAX / 10 && digit > 7 )) { return 0 ; } if (reversed < INT_MIN / 10 || (reversed === INT_MIN / 10 && digit < -8 )) { return 0 ; } reversed = reversed * 10 + digit; } return reversed; };
结果 执行用时 : 68 ms, 击败 77.92% 使用 JavaScript 的用户
内存消耗 : 42.45 MB, 击败 75.56% 使用 JavaScript 的用户
TypeScript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 function reverse (x : number ): number { let reversed = 0 ; const INT_MAX = Math .pow (2 , 31 ) - 1 ; const INT_MIN = -Math .pow (2 , 31 ); while (x !== 0 ) { const digit = x % 10 ; x = Math .trunc (x / 10 ); if (reversed > INT_MAX / 10 || (reversed === INT_MAX / 10 && digit > 7 )) { return 0 ; } if (reversed < INT_MIN / 10 || (reversed === INT_MIN / 10 && digit < -8 )) { return 0 ; } reversed = reversed * 10 + digit; } return reversed; }
结果 执行用时 : 80 ms, 击败 35.94% 使用 TypeScript 的用户
内存消耗 : 43.93 MB, 击败 75.78% 使用 TypeScript 的用户
PHP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution { function reverse ($x ) { $reversed = 0 ; $INT_MAX = pow (2 , 31 ) - 1 ; $INT_MIN = -pow (2 , 31 ); while ($x != 0 ) { $digit = $x % 10 ; $x = (int )($x / 10 ); if ($reversed > $INT_MAX / 10 || ($reversed == $INT_MAX / 10 && $digit > 7 )) { return 0 ; } if ($reversed < $INT_MIN / 10 || ($reversed == $INT_MIN / 10 && $digit < -8 )) { return 0 ; } $reversed = $reversed * 10 + $digit ; } return $reversed ; } }
结果 执行用时 : 8 ms, 击败 68.57% 使用 PHP 的用户
内存消耗 : 19.14 MB, 击败 5.72% 使用 PHP 的用户
Swift 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { func reverse (_ x : Int ) -> Int { var reversed = 0 let INT_MAX = Int32 .max let INT_MIN = Int32 .min var mutableX = x while mutableX != 0 { let digit = mutableX % 10 mutableX /= 10 if reversed > INT_MAX / 10 || (reversed == INT_MAX / 10 && digit > 7 ) { return 0 } if reversed < INT_MIN / 10 || (reversed == INT_MIN / 10 && digit < - 8 ) { return 0 } reversed = reversed * 10 + digit } return reversed } }
结果 执行用时 : 8 ms, 击败 22.22% 使用 Swift 的用户
内存消耗 : 14.84 MB, 击败 5.56% 使用 Swift 的用户
Kotlin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { fun reverse (x: Int ) : Int { var reversed = 0 val INT_MAX = Int .MAX_VALUE val INT_MIN = Int .MIN_VALUE var mutableX = x while (mutableX != 0 ) { val digit = mutableX % 10 mutableX /= 10 if (reversed > INT_MAX / 10 || (reversed == INT_MAX / 10 && digit > 7 )) { return 0 } if (reversed < INT_MIN / 10 || (reversed == INT_MIN / 10 && digit < -8 )) { return 0 } reversed = reversed * 10 + digit } return reversed } }
结果 执行用时 : 132 ms, 击败 93.18% 使用 Kotlin 的用户
内存消耗 : 32.98 MB, 击败 70.45% 使用 Kotlin 的用户
Dart 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution { int reverse(int x) { if (x > -10 && x < 10 ) { return x; } int res = 0 ; final minInt = -2147483648 ; final maxInt = 2147483647 ; int sign = 1 ; if (x < 0 ) { sign = -1 ; x = -x; } while (x != 0 ) { if (sign * res < minInt ~/ 10 || sign * res > maxInt ~/ 10 ) { return 0 ; } res = res * 10 + x % 10 ; x ~/= 10 ; } return sign * res; } }
结果 执行用时 : 312 ms, 击败 50.00% 使用 Dart 的用户
内存消耗 : 148.46 MB, 击败 90.00% 使用 Dart 的用户
Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 func reverse (x int ) int { if x > -10 && x < 10 { return x } res := 0 minInt := -2147483648 maxInt := 2147483647 sign := 1 if x < 0 { sign = -1 x = -x } for x != 0 { if sign*res < minInt/10 || sign*res > maxInt/10 { return 0 } res = res*10 + x%10 x /= 10 } return sign * res }
结果 执行用时 : 4 ms, 击败 26.89% 使用 Go 的用户
内存消耗 : 2.02 MB, 击败 23.89% 使用 Go 的用户
Ruby 1 2 3 4 5 6 7 8 9 10 11 12 13 def reverse (x ) abs = 1 abs = -1 if x < 0 reversed = x.abs.to_s.reverse.to_i * abs if -2 **31 <= reversed && reversed < 2 **31 return reversed else return 0 end end
结果 执行用时 : 52 ms, 击败 100.00% 使用 Ruby 的用户
内存消耗 : 206.73 MB, 击败 -% 使用 Ruby 的用户
Scala 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 object Solution { def reverse (x: Int ): Int = { if (x > -10 && x < 10 ) { return x } val minInt = -2147483648 val maxInt = 2147483647 var reversed = 0 var num = x var sign = 1 if (x < 0 ) { sign = -1 num = -x } while (num != 0 ) { val digit = num % 10 num /= 10 if (sign * reversed < minInt / 10 || sign * reversed > maxInt / 10 ) { return 0 } reversed = reversed * 10 + digit } sign * reversed } }
结果 执行用时 : 424 ms, 击败 66.67% 使用 Scala 的用户
内存消耗 : 51.57 MB, 击败 16.67% 使用 Scala 的用户
Rust 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 impl Solution { pub fn reverse (x: i32 ) -> i32 { if x > -10 && x < 10 { return x; } let min_int = i32 ::MIN; let max_int = i32 ::MAX; let mut reversed = 0 ; let mut num = x; let mut sign = 1 ; if x < 0 { sign = -1 ; num = -x; } while num != 0 { let digit = num % 10 ; num /= 10 ; if sign * reversed < min_int / 10 || sign * reversed > max_int / 10 { return 0 ; } reversed = reversed * 10 + digit; } sign * reversed } }
结果 执行用时 : 0 ms, 击败 100.00% 使用 Rust 的用户
内存消耗 : 2.16 MB, 击败 16.03% 使用 Rust 的用户
Racket 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (define (reverse x) (define _reverse (lambda (ls) (if (null? ls) '() (append (_reverse (cdr ls)) (list (car ls)))))) (let* ((to-list (string->list (number->string (abs x)))) (reversed-list (_reverse to-list)) (reversed-str (list->string reversed-list)) (reversed-num (string->number reversed-str)) (reversed (if (< x 0 ) (- 0 reversed-num) reversed-num))) (if (and (>= reversed -2147483648 ) (<= reversed 2147483647 )) reversed 0 )))
结果 执行用时 : 216 ms, 击败 100.00% 使用 Racket 的用户
内存消耗 : 98.86 MB, 击败 100.00% 使用 Racket 的用户
Erlang 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -export ([reverse/1 ]) .reverse (X) when X >= -9, X =< 9 -> X; reverse (X) -> Sign = if X < 0 -> -1 ; true -> 1 end , AbsX = abs(X), Reversed = reverse_helper(AbsX, 0 ), case Reversed * Sign of Result when Result >= -2147483648 , Result =< 2147483647 -> Result; _ -> 0 end . reverse_helper (0 , Acc) -> Acc; reverse_helper (X, Acc) -> Digit = X rem 10 , NewAcc = Acc * 10 + Digit, NewX = X div 10 , reverse_helper(NewX, NewAcc).
结果 执行用时 : 256 ms, 击败 -% 使用 Erlang 的用户
内存消耗 : 55.36 MB, 击败 -% 使用 Erlang 的用户
Elixir 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 defmodule Solution do @spec reverse(x :: integer) :: integer def reverse (x) when x in -9 ..9 do x end def reverse (x) do sign = if x < 0 , do: -1 , else: 1 abs_x = abs(x) reversed = reverse_helper(abs_x, 0 ) case reversed * sign do result when result >= -2147483648 and result <= 2147483647 -> result _ -> 0 end end defp reverse_helper (0 , acc), do: acc defp reverse_helper (x, acc) do digit = rem(x, 10 ) new_acc = acc * 10 + digit new_x = div(x, 10 ) reverse_helper(new_x, new_acc) end end
结果 执行用时 : 304 ms, 击败 100.00% 使用 Elixir 的用户
内存消耗 : 68.14 MB, 击败 100.00% 使用 Elixir 的用户