fn main() { dbg!(Solution::reverse(1534236469)); } struct Solution(()); impl Solution { pub fn reverse(x: i32) -> i32 { let n = if x < 0 { x * -1 } else { x }; if let Some(i) = Self::invert(n as u32, 0).0 { let t: u32 = 1 << 31; if (i & t) == t { return 0; } if x < 0 { return i as i32 * -1; } return i as i32; } 0 } fn invert(n: u32, pow: u32) -> (Option, u32) { if n < 10 { return (Some(n), pow + 1); } let m = n % 10; let d = (n - m) / 10; let c = Self::invert(d, pow); if let Some(inner) = c.0 && let Some(m) = m.checked_mul(10_u32.pow(c.1)) { return (Some(m + inner), c.1 + 1); } (None, 0) } }