码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode:Reverse Integer - 翻转数字

时间:2015-09-20 22:32:10      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

1、题目名称

Reverse Integer(翻转数字)

2、题目地址

https://leetcode.com/problems/reverse-integer/

3、题目内容

英文:Reverse digits of an integer.

中文:翻转一个正整数的各位,形成一个新数字

例如:x = 123, return 321;x = -123, return -321

4、一个有瑕疵的方法(不能AC)

一个比较好想到的方法,是先将输入的数字转换为字符串,再将字符串翻转后转换为数字。这个方法对于一般的数字来说是可行的,它的缺点是面对一些非常大的整数时,如果翻转会造成溢出,不能进行判断。Java代码如下:

/**
 * 功能说明:LeetCode 7 - Reverse Integer
 * 开发人员:Tsybius
 * 开发时间:2015年9月20日
 */
public class Solution {
    
    /**
     * 反转数字
     * @param x 被反转数字
     * @return 反转后数字
     */
    public int reverse(int x) {
        
        if (x == 0) {
            return 0;
        }

        String str = String.valueOf(x >= 0 ? x : -x);
        str = (new StringBuilder(str)).reverse().toString(); 
        
        if (x > 0) {
            return Integer.parseInt(str); 
        } else {
            return Integer.parseInt("-" + str);
        }
    }
}

5、解题方法

一个比较保险的方法,就是计算的时候采用long类型,计算完毕后再看是否超过了整型的上界或下界,超过了则返回整型的最大值或最小值,否则直接强制转换为整型后返回即可。Java代码如下:

/**
 * 功能说明:LeetCode 7 - Reverse Integer
 * 开发人员:Tsybius
 * 开发时间:2015年9月20日
 */
public class Solution {
    
    /**
     * 反转数字
     * @param x 被反转数字
     * @return 反转后数字
     */
    public int reverse(int x) {
        
        if (x == 0) {
            return 0;
        }

        //先转换为正整数计算
        boolean sign = x > 0 ? true : false;
        x = sign ? x : x * (-1);
        
        //使用长整型类型计算结果,防止溢出错误
        long result = 0L;
        while (true)
        {
            result += x % 10;
            x /= 10;
            
            if (x != 0) {
                result *= 10;
            } else {
                break;
            }
        }
        
        //得出结果,比较是否超出整型最大/最小值
        result = sign ? result : result * (-1);
        if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
            return 0;
        } else {
            return (int)result;
        }
    }
}

这个方法的代码还可以被进一步精简,下面这段代码减少代码行数:

/**
 * 功能说明:LeetCode 7 - Reverse Integer
 * 开发人员:Tsybius
 * 开发时间:2015年9月20日
 */
public class Solution {
    
    /**
     * 反转数字
     * @param x 被反转数字
     * @return 反转后数字
     */
    public int reverse(int x) {
        
        long result = 0;

        while (x!=0) {
            result = result * 10 + x % 10;
            x /= 10;
        }
        
        return (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) ? 0 : (int)result;
    }
}

END

LeetCode:Reverse Integer - 翻转数字

标签:

原文地址:http://my.oschina.net/Tsybius2014/blog/508900

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!