标签:
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