07. 整数反转

本文最后更新于:25 天前

07. 整数反转

题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

1
2
输入:x = 123
输出:321

示例 2:

1
2
输入:x = -123
输出:-321

示例 3:

1
2
输入:x = 120
输出:21

示例 4:

1
2
输入:x = 0
输出:0

提示:

  • -2^31 <= x <= 2^31 - 1

题解

数学计算令人头秃,选择字符串反转 T_T

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int reverse(int x) {
int smb = x < 0 ? 1 : 0;
string s = to_string(x).substr(smb);
string s_re;
for (int i = s.size() - 1; i >= 0; i--) {
s_re += s[i];
}
string max = to_string(INT_MAX);
s_re = string(max.size() - s_re.size(), '0') + s_re;
if (s_re >= max) {
return 0;
}
int z = 0;
for (int i = 0; i < s.size(); i++) {
z += (s[i] - '0') * std::pow(10, i);
}
return smb == 1 ? -z : z;
}

总结

  1. 字符串翻转,遍历字符串 (s[i] - ‘0’) * 10 ^ i 计算结果;
  2. 判断溢出问题,去除符号位后,将判断条件优化为字符串 s_rev > INT_MIN 和 s_rev > INT_MAX
  3. 根据题目限制,输入 x 的取值范围 [-2^31, 2^31 - 1],因此不存在两个数在翻转后可以等于边界值,所以优化溢出判断,仅需要判断 s_rev < INT_MAX 即可;

07. 整数反转
https://ccccx159.github.io/2024/04/14/leetcode/07.整数反转/
作者
Xu@n Ch3n
发布于
2024年4月14日
更新于
2024年4月18日
许可协议