Leetcode 第7题 - 反转整数(easy)
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
解题思路
反转整数很简单 ,我们要一次拆解 各个位数 然后每次乘以 10 把上一次加上就好了,如果是负数 我们先把 符号 截取 反转后加上。
我们需要注意的是,32位的数的取值范围是 [−2^31, 2^31 − 1],如果反转后超出 这个值返回0 。
example:
给个 b = 1024 a = 0
第一次 a = (a + b % 10) * 10 = 4 *10 =40 然后更新下 b = 1024 /10 = 102
第二次 a = (a + b % 10) * 10 = (40 + 102 % 10) * 10 = 420 然后更新下 b = 102 /10 = 10
第三次 a = (a + b % 10) *10 = (420 + 10 % 10) * 10 = 4200 然后更新下 b = 10 /10 = 1
第四次 a = (a + b % 1) *10 = (4200 + 1 % 10) * 10 = 4201 结束条件 b=1/10 =0.1 小于 1 条件结束
我们 要注意 在转换过程中,如果数字超出 范围就返回 0 ,为此 我们在 需要把数字转换成 i64 去判断下大小。
全部代码
pub fn reverse(x: i32) -> i32 { let mut tmp; if(x < 0 ){ tmp = -x; }else{ tmp = x; } let mut tmp1 = 0; while (tmp >= 1){ //转换成 i64 去判断是否溢出 let mut tmpcalc = tmp1 as i64 + (tmp % 10) as i64 ; //这里当 分解到最后一位数的时候 就不要再成10了 if tmp >= 10 { tmpcalc*= 10; } //判断下 是否溢出 if tmpcalc > 2147483648 || tmpcalc < -2147483648 { return 0;} tmp1 = tmpcalc as i32; tmp = tmp / 10; } //判断 x 是正数还是负数 if x <0{ -tmp1 }else{ tmp1 } } fn main() { println!("{}",reverse(102)); println!("{}",reverse(9080980)); println!("{}",reverse(90801290)); }
