33/// Exchange front and end digits (not bits) one by one, return zero if
44/// overflow
55///
6+ /// ### Description
7+ ///
8+ /// Given a signed 32-bit integer x, return x with its digits reversed.
9+ /// If reversing x causes the value to go outside the signed 32-bit integer
10+ /// range [-231, 231 - 1], then return 0.
11+ ///
12+ /// Assume the environment does not allow you to store 64-bit integers (signed or /// unsigned).
13+ ///
14+ ///
15+ ///
16+ /// Example 1:
17+ ///
18+ /// Input: x = 123
19+ /// Output: 321
20+ /// Example 2:
21+ ///
22+ /// Input: x = -123
23+ /// Output: -321
24+ /// Example 3:
25+ ///
26+ /// Input: x = 120
27+ /// Output: 21
28+ ///
29+ ///
30+ /// Constraints:
31+ ///
32+ /// -231 <= x <= 231 - 1
33+ ///
34+ /// Source: https://leetcode.com/problems/reverse-integer/description/
35+ ///
636/// ### Argument
7- /// * `x` - 32-bit integer to alter
37+ /// * `x` - 32-bit signed integer to alter
838///
939/// ```
1040/// use leetcode_rust::problems::p000_0xx::p000_007::reverse_integer;
@@ -20,20 +50,20 @@ pub fn reverse_integer(x: i32) -> i32 {
2050/// Reverse an integer (32-bit long) and check for overflow.
2151///
2252/// ### Argument
23- /// * `x` - 32-bit integer to alter
53+ /// * `x` - 32-bit signed integer to alter
2454fn reverse_s1 ( x : i32 ) -> i32 {
2555 let mut temp_stack: Vec < u8 > = vec ! [ ] ;
2656 // Convert integer to digits.
2757 for ch in x. to_string ( ) . as_bytes ( ) {
28- if * ch as char != '-' {
58+ if * ch != 45 {
2959 temp_stack. push ( * ch) ;
3060 }
3161 }
3262 loop {
3363 // Remove trailing zeros if present
3464 match temp_stack. last ( ) {
3565 Some ( last_ch) => {
36- if * last_ch as char == '0' && temp_stack. len ( ) > 1 {
66+ if * last_ch == 48 && temp_stack. len ( ) > 1 {
3767 temp_stack. pop ( ) ;
3868 } else {
3969 break ;
@@ -44,17 +74,18 @@ fn reverse_s1(x: i32) -> i32 {
4474 }
4575 temp_stack. reverse ( ) ;
4676
47- let mut overflow_at: i32 = 2147483647 ;
77+ // 2147483647 for positive numbers
78+ let mut overflow_at_u8: [ u8 ; 10 ] = [ 50 , 49 , 52 , 55 , 52 , 56 , 51 , 54 , 52 , 55 ] ;
4879 let mut target: Vec < u8 > = vec ! [ ] ;
4980 // Detect sign of input number and update overflow threshold if needed.
5081 if x < 0 {
5182 target. push ( '-' as u8 ) ;
52- overflow_at = 2147483647 ;
83+
84+ // 2147483648 for negative numbers (without sign)
85+ overflow_at_u8 = [ 50 , 49 , 52 , 55 , 52 , 56 , 51 , 54 , 52 , 56 ] ;
5386 }
5487
5588 // Check overflow regardless of the sign
56- let overflow_at_str = overflow_at. to_string ( ) ;
57- let overflow_at_u8 = overflow_at_str. as_bytes ( ) ;
5889 if temp_stack. len ( ) >= overflow_at_u8. len ( ) {
5990 for idx in 0 ..overflow_at_u8. len ( ) {
6091 if temp_stack[ idx] < overflow_at_u8[ idx] {
0 commit comments