题目的要求就是要反转一个Integer,例如输入123,则输出321,这一题比较tricky的地方就是它有可能越界,就是说1234567899,反过来是9987654321是一个越界的Integer,按照题目要求,碰到越界返回0,就好。关键的地方就在于,怎么判断它是否越界呢?一开始为了处理这个越界的问题,我才用了一个大小为10的int数组来存每一位,通过处理最高位来判断是否越界,后来发现有更为简单的方法,代码量要小很多,但是两者在速度上并没有什么太大的区别,代码如下:

  

 //思路:用数组去存位数,再翻转。
public class Solution {
public int reverse(int x) {
if (x == 0) return 0;
int[] num = new int[10];
int index = 0;
//x2用来判断x是大于0还是小于0。
int x2 = x;
while (x != 0) {
num[index++] = x % 10;
x = x / 10;
}
int reverseNum = num[0];
for (int i = 1; i < index; i++) {
//注意溢出的情况,不能直接乘以10,因为这样子不能通过正负号判断是否溢出,
//在刚好溢出的时候,最大的变化就是正负号的转变,所以得一个一个加。
if (i == 9) {
for (int j = 0; j < 9; j++) {
reverseNum += reverseNum;
if (reverseNum < 0 && x2 > 0) return 0;
if (reverseNum > 0 && x2 < 0) return 0;
}
reverseNum += num[i];
} else {
reverseNum = reverseNum * 10 + num[i];
}
}
return reverseNum;
}
}

  后来发现了一个更为简洁的方法,那就是延长输入为long,这样子就不需要判断最高位,直接通过x是否越过Integer的最大最小值就可以判断出来。代码如下:

 public class Solution {
public int reverse(int x) {
long reverseNum = 0;
while (x != 0) {
reverseNum = 10 * reverseNum + (long)x % 10;
x = x/10;
}
if (reverseNum > (long)Integer.MAX_VALUE || reverseNum < (long)Integer.MIN_VALUE) return 0;
else return (int) reverseNum;
}
}

  相当简洁。但是如果速度影响不太多的情况下,本人还是倾向于第一种,因为延长Integer to long,总感觉是一种比较tricky的方法,如果输入的不是int x而是long x呢?或者说输入的是一个位数非常大的数字呢?

最新文章

  1. 浅谈单片机中C语言与汇编语言的转换
  2. CSS3按钮效果
  3. CSS Vocabulary – CSS 词汇表,你都掌握了吗?
  4. 【转】最长回文子串的O(n)的Manacher算法
  5. HBase 压缩算法设置及修改
  6. Compare Strings
  7. sublime3的licence(update 2016-04-14)
  8. Sqli-labs less 59
  9. codejam环境熟悉&mdash;Minimum Scalar Product
  10. Java SimpleDateFormat 函数
  11. (转)Android系统自带样式(@android:style/)
  12. 转--23种设计模式的搞笑解释(后续放逐一C++解释版本)
  13. Antelope与 Barracude MYSQL 文件格式
  14. js深入研究之类定义与使用
  15. qt windows分发工具使用(windoployqt)
  16. linux内存基础知识和相关调优方案
  17. 正常启动HBase顺序
  18. 一个老鸟发的公司内部整理的 Android 学习路线图
  19. git 入门教程之github 教程
  20. Fiddler手机抓包软件简单使用--将h5效果显示在手机

热门文章

  1. 自动化mobile测试
  2. umount移动硬盘遇到device is busy问题
  3. [POJ2777]Count Color(线段树)
  4. How to use &#39;crontab&#39; command on bitnami
  5. 多态and接口
  6. UVa 1395 Slim Span【最小生成树】
  7. BZOJ 3624 免费道路
  8. Maven的功用所引发的哲学思想
  9. ORACLE CONTROL FILE 笔记
  10. 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)