颠倒整数

作者: 第四单元 | 来源:发表于2018-04-08 10:08 被阅读30次

    题目:

    给定一个范围为 32 位 int 的整数,将其颠倒。

    例 1:

    输入: 123
    输出: 321

    例 2:

    输入: -123
    输出: -321

    例 3:

    输入: 120
    输出: 21

    注意:

    假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。

    思路:

    除10取余就可以得到最低位,除以10使倒数第二低位移到最低位。这道题的需要注意的是颠倒结果不在int范围内的情况。用long存储结果,方便进行比较。

    代码

    class Solution {
        public int reverse(int x) {
            int flag = 1;
            if(x < 0) flag = -1;
            int value = flag * x;
            int[] nums = new int[10];
            int i = 0;
            int tmp = value;
            //获取x的各位上的数字,存到数组里
            while(tmp > 0) {
                nums[i++] = tmp % 10;
                tmp /= 10;
            }
    
            long ans = 0;
            int j = 0;
            while(j < i) {
                ans = ans * 10 + nums[j++];
            }
             //判断范围
            if(flag == 1 && ans > ((1L << 31) - 1))
                return 0;
            if(flag == -1 && ans > (1L << 31))
                return 0;
            return (int)ans * flag;
        }
    }
    

    相关文章

      网友评论

        本文标题:颠倒整数

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