美文网首页
LeetCode Reverse Integer

LeetCode Reverse Integer

作者: Leon_hy | 来源:发表于2019-07-31 09:23 被阅读0次

    原创:悦乐书 程序员小川

    给定32位有符号整数,然后将其反转输出。例如:

    输入: 123
    输出: 321

    输入: -123
    输出: -321

    输入: 120
    输出: 21
    给定反转整数范围: [−2^31, 2^31 − 1],即在int的最小值、最大值之间,如果反转整数超过此范围,则返回0。

    分析:

    首先,特许情况是输入值为0,可以直接输出0。
    第二步,因为会后负数出现,先判断是否为负数,留下标记,因为处理数据的过程中,操作正数方便于操作负数,这里利用Math.abs()函数取绝对值。
    第三步,反转数据。例如:

    1223  取反为  3221
    最后一位数 = 1223%10 = 3
    倒数第二位数 = 122%10 = 2, 其中122是1223除以10后的数
    倒数第三位数 = 12%10 = 2, 其中12是122除以10后的数
    倒数第四位数 = 1%10 = 1, 其中1是12除以10后的数
    拿到反转的数  31000 + 2100 + 210 + 1 = 3221 
    

    可以进一步分析反转的数是怎么来的:

    010 + 3 = 3
    310 + 2 = 32 3210 + 2 = 322
    322*10 + 1 = 3221
    反转的数是原数对10取余的余数从个十百位依次向前移动 加上 新的余数
    

    第四步,判断是否超出范围,是则返回0,否则判断符号标记,还原符号。对于还原符号的操作,可以直接加上“-”号,也可以用0减反转后的数,也可以利用Math.negateExact()函数。

       public static int reverseData(int x){
            int result =0;
            if (0==x){
                return 0;
            }
            boolean flag = false;
            if (x<0){
                flag=true;
            }
            int item = Math.abs(x);
            long afterreverse = 0;
            while (item>0){
                afterreverse = afterreverse*10+item%10;
                item /= 10;
            }
            if (flag){
                afterreverse = 0-afterreverse;
            }
            if (afterreverse > Integer.MAX_VALUE || afterreverse < Integer.MIN_VALUE) {
                result = 0;
            } else {
                result = (int)afterreverse;
            }
    
            return result;
        }
    

    相关文章

      网友评论

          本文标题:LeetCode Reverse Integer

          本文链接:https://www.haomeiwen.com/subject/fkgarctx.html