1 题目
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Have you thought about this?
Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!
If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.
Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?
For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
2 思路
题目提醒了要考虑1 10,100变成1的情况,2 翻转后的数字溢出两种特殊情况。
我想到的是转换为字符串后,反转,然后再变为数字。考虑两种特殊情况,一是负号,二是溢出,溢出可以用try,catch捕捉。
网上的一种代码是利用long多一倍的字节长度来存溢出的数字,采用循环,每次取10的余数,就可以取出最左边一位。效率要高很多。
3 代码
public int reverse(int x){ String string = Integer.toString(x); StringBuffer sb = new StringBuffer(string); if (sb.charAt(0) == '-') { sb = sb.deleteCharAt(0); sb = sb.reverse(); sb.insert(0, '-'); }else { sb = sb.reverse(); } string = sb.toString(); int reverseX = 0; try { reverseX = Integer.parseInt(string);//溢出 } catch (Exception e) { return 0; } return reverseX; }
网上那种思路的代码
public int reverse2(int x) { long num = 0; while(x != 0){ int temp = x % 10;//取最右边数字 num += temp; x /= 10; if(x != 0) num *= 10; } if(num > Integer.MAX_VALUE || num < -Integer.MIN_VALUE) return 0; else return (int)num; }