算法学习打卡计划

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原本是负数输出时加上符号即可。

上一篇下一篇

猜你喜欢

热点阅读