leetcode:第7题
2022-10-05 本文已影响0人
皮克斯不爱吃糖
题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
例1
输入:x = 123
输出:321
例2
输入:x = -123
输出:-321
例3
输入:x = 120
输出:21
例4
输入:x = 0
输出:0
提示
-pow(2,31) <= x <= pow(2,31) - 1
代码
class Solution {
public:
int reverse(int x) {
long y = 0;//刚开始测试使用的是int型,但是碰到 测试数据为964632435时,产生溢出,无法继续计算
int temp = 1;
int n = 1;
while(n !=0)
{
temp = x %10;
y = y * 10 + temp;
if(y > INT_MAX || y < INT_MIN)
return 0;
x = x / 10;
n = x;
}
return y;
}
};
思路
尝试了以下几种解法。
方法一:转为字符串反转。这个方法需要注意的是,如果测试数据是负数,则反转过程中需要将“-”负号单独保留前缀,如果对原字符串的单个字符依次从0开始编号的话,则跳过0位置,从1开始反转。相对复杂,会超出时间限制。
方法二:直接计算法,直接计算只需要注意题目提示中的限制范围即可。如上代码,需要注意的是反转后的数定义为long型,否如果是int型,测试过程中会发生溢出。这个方法时最简单的。
方法三,与方法一类似,不过是转为数组进行反转,法一和三都可用指针。
方法四:直接将测试数据计算abs(x),再反转,若x原本是负数输出时加上符号即可。