LeetCode - 7. Reverse Integer

来源:互联网 发布:matlab在线编程 编辑:程序博客网 时间:2024/05/01 09:05

这道题目看似简单,但是有一个int溢出的问题需要考虑,故而在每一步迭代计算result的时候,都要检测是否超过了Integer.MAX_VALUE,但是在result已经大于Integer.MAX_VALUE的时候检测是不行的,因为这时候result已经溢出,成为负数。故而应该在计算前检测result和(Integer.MAX_VALUE - x % 10) / 10的关系,如果大于的话就说明接下来的result累加肯定会溢出,所以这时返回0即可。代码如下:

public class Solution {    public int reverse(int x) {        int result = 0;                boolean negative = false;        if(x < 0){            negative = true;            x = -x;        }                while(x != 0){            // Check if result overflows            if(result > (Integer.MAX_VALUE - x % 10) / 10){                return 0;            }else{                result = result * 10 + x % 10;            }            x /= 10;        }                return negative ? -result : result;    }}


知识点:

1. 怎样从一系列的digits中回复一个数字,result = 0。注意这里有一个技巧就是在每一次迭代的时候通过使用result * 10的方法来达到移位的目的,比如这道题目中的result = result * 10 + x % 10。另外这个reverse integer的题目也是一个元方法,这个方式很可能作为以后题目中的某一部分,最好记下来

2. 检测溢出的方法:在某个数字number已经溢出的时候检测它与Integer.MAX_VALUE的关系是不行的,因为这时候已经溢出,number很可能变成了一个负数,所以应该在number迭代中变大的每一步前检测和Integer.MAX_VALUE逆向这个过程后得到数字的大小,比如说这道题目就是检测result和(Integer.MAX_VALUE - x % 10) / 10的关系

0 0
原创粉丝点击