之前想着一起学习一下官方教程都是英文版,也没有中文官方网站,想着一起边看英文文档边学习一波,现在已经有翻译很不错的中文教程,我就不献丑了,发现 Leetcode 上用 Rust 刷题的比较少,我就每周更新几道 Leetcode 的题目到专栏,和大家一起学习一下 Rust。如果想要 PDF 文档,可以关注我的公众号 LeeTao ,然后回复 Rust编程语言 得到和官网同步的 PDF
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路
- 如果大于 0 :
1.1 从尾部遍历,找到第一个不为 0 的数字
1.2 然后依次返回 - 如果小于 0:
2.1 将其先变为正数
2.2 然后重复 1.1 和 1.2
2.3 最后变为负数 - 如果返回结果溢出,则返回 0
- 如果等于0,直接返回 0
解法
impl Solution {
pub fn reverse(x: i32) -> i32 {
let mut x: i64 = x as i64;
if x == 0 {
return 0;
}
let mut flag = 1;
if x < 0 {
flag = -1;
x = x*(-1);
}
let mut v = vec![];
while x > 0 {
v.push(x%10);
x = x / 10;
}
let mut reverse_num:i64 = 0;
for num in v {
reverse_num = reverse_num * 10 + num as i64;
if reverse_num > i32::max_value() as i64 {
return 0;
}
}
reverse_num = reverse_num*flag;
return reverse_num as i32;
}
}