Leetcode 整数反转
地址:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/5/strings/33/
题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
我的解决方案
4个关键点:
- 将符号与数值分离单独处理
- 定义保存结果的变量
t
,数据类型的选择(long long
) - 逆转,基础操作
- 判断是否溢出
算法:
class Solution {
public:
int reverse(int x) {
int sym = 1; //符号为正 sym == 1 ,符号为负 sym == -1
//t保存反转后的整数,数据类型必须用long long,否则t溢出后已被处理,无法判断其正确的值是否溢出
long long t = 0; //只能用long long,int或long都不行,需要将t初始化为0
if (x < 0) { //如果x为负,置sym为-1并变x为正
sym = -1;
x = -1 * x;
}
while (x != 0) { //对正数x进行反转
t = t * 10 + x % 10;
x = x / 10;
}
if (t > 0x7fffffff || t < (signed int)0x80000000) //判断逆转后的x是否溢出
return 0;
return sym * t; //返回逆转后的数
}
};
Leetcode 整数反转
https://mxy493.xyz/2019013124102/