LeetCode算法刷题easy系列之整数反转

184 阅读1分钟

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围,就返回 0。

示例:
输入: x = 123
输出: 321

分析

这是一道easy的基础算法题,可以通过数学的取模实现;
例:-12345
也就是每次对10取模,先取出每个位置上的数(正负号保留):
-12345%10 = -5(这是个位上的数),之后将-12345 / 10=-1234
-1234%10 = -4(这是十位上的数),之后将-1234 / 10=-123
-123%10 = -3(这是百位上的数),之后将-123 / 10=-12
-12%10 = -2(这是千位上的数),之后将-12 / 10=-1
-1%10 = -1(这是个万位上的数)
接下来就是考虑翻转了:
-5*10000+(-4*1000)+(-3*100)+(-2*10)+(-1)=-54321

当然这里int类型是有限制的,要保证在不溢出的情况下翻转.这里超出就返回0
public static int reverse(int x){
    //最大
    int maxInt = 214748364;
    //最小
    int minInt = -214748364;
    //最大位数
    int maxIndex = 7;
    //最小位数
    int minIndex = -8;
    int res = 0;
    while(x!=0) {
        //每次取末尾数字
        int tmp = x%10;
        //判断是否 大于 最大32位整数
        if (res>maxInt || (res==maxInt && tmp>maxIndex)) {
            return 0;
        }
        //判断是否 小于 最小32位整数
        if (res<minInt || (res==minInt && tmp<minIndex)) {
            return 0;
        }
        res = res*10 + tmp;
        x /= 10;
    }
    return res;
}