【leetcode】# 7 整数翻转 Rust Solution
阅读原文时间:2023年08月09日阅读:1

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

Rust Solution:

1 fn reverse(x: i32) -> i32 {
2 let mut flag = false;
3 let mut abs_x;
4 if 0 < x { 5 flag = true; 6 abs_x = x; 7 } else { 8 abs_x = x.abs(); 9 } 10 // println!("abs_x = {}", abs_x); 11 12 let mut result :i32 = 0; 13 14 loop { 15 if abs_x / 10 == 0 && abs_x % 10 == 0 { 16 break; 17 } else { 18 let temp = abs_x % 10; 19 // println!("temp = {}", temp); 20 abs_x = abs_x / 10; 21 result += temp; 22 23 if abs_x == 0 { 24 result *= 1; 25 } else { 26 //这里会发生溢出,如果发生溢出的话这个函数返回的是None 27 // if let Some(value) = result.checked_mul(10) { 28 // result = value; 29 // // println!("result = {}", result); 30 // } else { // 匹配不到值返回的是0 31 // return 0; 32 // } 33 34 let ret = result.checked_mul(10); 35 match ret { 36 Some(value) => result = value,
37 None => { return 0; },
38 }
39 }
40 }
41 }
42
43 if flag { // if flag true
44 // result = result;
45 } else { // if flag false
46 result *= -1;
47 }
48 result
49 }
50
51 fn reverse_v2(x: i32) -> i32 {
52 // println!("{}", x.signum());
53 x.abs()
54 .to_string()
55 .chars().rev()
56 .collect::()
57 .parse::()
58 .unwrap_or(0) * x.signum()
59
60 }
61 fn main() {
62 // let x = 1534236469;
63 // let x = 123;
64 let x = -321;
65 // let x = 120;
66 let ret = reverse_v2(x);
67
68 println!("x = {}, ret = {}", x, ret);
69 // println!("Hello, world!");
70 }