LeetCode高频算法面试题 - 007 - 整数反转

5/5/2022

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

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

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

题目难度: ★★, 中等

示例 1:

输入:x = 123
输出

示例 2:

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

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

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

# 代码实现

tips: 以下代码是使用Go代码实现的不同解法, 文章最后可以看C++、C、Java、Python实现

解题思路:

以12345为例,先拿到5,再拿到4,之后是3,2,1,我们按这样的顺序就可以反向拼接处一个数字了,也就能达到 反转 的效果。 怎么拿末尾数字呢?好办,用取模运算就可以了

1)、将12345 % 10 得到5,之后将12345 / 10
2)、将1234 % 10 得到4,再将1234 / 10
3)、将123 % 10 得到3,再将123 / 10
4)、将12 % 10 得到2,再将12 / 10
5)、将1 % 10 得到1,再将1 / 10

important, 这题整体还是很简单的, 只需要注意几个坑就行了, 一个是负数, 一个是可能会溢出, 比如原数字1147483649, 翻转后9463847411就会溢出(最大的32位整数2147483647)

func reverse(x int) ( num int) {
    for x != 0 {
        num = num*10 + x%10
        x = x / 10
    }
    // 使用 math 包中定义好的最大最小值
    if num > math.MaxInt32 || num < math.MinInt32 {
        return 0
    }
    return
}

# 其他语言实现

1、Java

class Solution {
    public int reverse(int x) {
        int res = 0;
        while(x!=0) {
            //每次取末尾数字
            int tmp = x%10;
            //判断是否 大于 最大32位整数
            if (res>214748364 || (res==214748364 && tmp>7)) {
                return 0;
            }
            //判断是否 小于 最小32位整数
            if (res<-214748364 || (res==-214748364 && tmp<-8)) {
                return 0;
            }
            res = res*10 + tmp;
            x /= 10;
        }
        return res;
    }
}     

2、Python3

class Solution:
    def reverse(self, x: int) -> int:
        if -10 < x < 10:
            return x
        str_x = str(x)
        if str_x[0] != "-":
            str_x = str_x[::-1]
            x = int(str_x)
        else:
            str_x = str_x[:0:-1]
            x = int(str_x)
            x = -x
        return x if -2147483648 < x < 2147483647 else 0

3、C

int reverse(int x){
    int out=0;
    while(x!=0){
        if((out>214748364)||(out<-214748364)) return 0;
        out=out*10+x%10;
        x=x/10;
    }

    return out;
}

# 几种语言运行效果对比

也欢迎关注我的公众号: 漫步coding。 一起交流, 在coding的世界里漫步。