概述
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
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.
Update (2014-11-10):
Test cases had been added to test the overflow behavior.
【算法思路】
1. 运用递归反转整数,注意特殊情况如溢出等。我对于溢出的判断就是 要返回的那个数字的最后一位是不是等于当前的第一位数字,不等于则表示溢出。
public int reverse(int x) {
return func(x, 0);
}
private int func(int x, int existNums)
{
existNums = existNums * 10 + x % 10;
if(x / 10 == 0)
{
if(existNums % 10 != x)
return 0;
return existNums;
}
else
{
return func(x / 10, existNums);
}
}
2. 按照数字位反转过来,基本数字操作。但是这种题的考察重点并不在于问题本身,越是简单的题目越要注意细节,一般来说整数的处理问题要注意的有两点,一点是符号,另一点是整数越界问题。
【CODE】
- public int reverse(int x) {
- if(x==Integer.MIN_VALUE)
- return 0;
- int num = Math.abs(x);
- int res = 0;
- while(num!=0)
- {
- if(res>(Integer.MAX_VALUE-num%10)/10)
- return 0;
- res = res*10+num%10;
- num /= 10;
- }
- return x>0?res:-res;
- }
上面的代码为了后面方便处理,先将数字转为正数。
注意Integer.MIN_VALUE的绝对值是比Integer.MAX_VALUE大1的,所以经常要单独处理。
如果不先转为正数也可以,只是在后面要对符号进行一下判断。
这种题目考察的就是数字的基本处理,面试的时候尽量不能错,而且对于corner case要尽量进行考虑,一般来说都是面试的第一道门槛。
最后
以上就是强健大白为你收集整理的Leet Code 7 Reverse Integer的全部内容,希望文章能够帮你解决Leet Code 7 Reverse Integer所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复