题解 | #反转数字#

反转数字

http://www.nowcoder.com/practice/1a3de8b83d12437aa05694b90e02f47a

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

输入:12
返回值:21

方法一 数学模拟

对数字每次进行%10运算重新翻转,之后再判断界限与符号即可, 翻转后的数可以用long来存储方便后面判断范围
图片说明

 int reverse(int x) {
        // write code here
       int a = x;
        if(a < 0) a *= -1;
        long ans = 0;
        while(a){    //遍历数字所有位
            ans *= 10;
            ans += a % 10;
            a /= 10;
        }
        if( ans < -(long)((long)1 << (long)31) || ans >= ((long)((long)1 << (long)31) )) return 0;    //判断范围
        if(x < 0) ans *= -1; //取负数符号
        return (int)ans;
    }

时间复杂度: O(n) 遍历一遍数字的长度
空间复杂度: O(1) 若干个变量

方法二 使用java字符串操作

将其转换成string进行翻转操作

    public int reverse (int x) {
        // write code here
        boolean fase = false;
        if(x < 0 ) {    //判断x是否位负数
            fase = true;x *= -1;
        }
        String a = new StringBuffer(String.valueOf(x)).reverse().toString();//转成字符串并翻转
        long s = Long.valueOf(a).longValue();
        if( ( -((long)1 << 31) - 1) <= s &&s <= ( ((long)1 << 31) - 1)){    //判断范围
            if(fase) return (int)s * -1;
            return (int)s;
        }
        return 0;
    }

时间复杂度: O(n) 使用reverse进行字符串翻转,reverse复杂度为O(n)
空间复杂度: O(n) 存储数字的字符串,长度为数字的长度

全部评论

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务