LeetCode算法7:java 整数反转

版权声明:可以转载,请注明链接出处 https://blog.csdn.net/xihuanyuye/article/details/85125803

问题:
示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

问题说明
问题的难度适中,主要考虑数学思维,已经计算机中对于边界的处理技巧。这里有个非常有趣的问题,对于溢出的数据,需要返回0。但是在计算机中,是不能真正让数据溢出的现象出现的。
因此如何在数据溢出前判定其会溢出的可能,是该问题的核心难点。

代码

package _01_50;
public class _07ReverseInteger{
	public int reverse(int x){
		int out = 0;
		while(true){;
			if(out < (Integer.MIN_VALUE/10)) return 0;
			if(out> (Integer.MAX_VALUE/10))return 0;
			if(x<0){
				if((Integer.MIN_VALUE - x%10)>out*10) return 0;
				}	
			if(x>0){
				if((Integer.MAX_VALUE - x%10)<out*10) return 0;
				}
		//out*10 + x%10 compare with max_value
			out = out*10 + x%10;
			x = x/10;
			if(x==0) break;
			}
			return out;
	}

	public static void main(String[] arg){
		_07ReverseInteger ReverseInteger = new _07ReverseInteger();
		
		int a = 0;
		int b = -1234;
		int c = 45245245;
		int d = 1341350;
		int e = 12;
		System.out.println(ReverseInteger.reverse(a));
		System.out.println(ReverseInteger.reverse(b));
		System.out.println(ReverseInteger.reverse(c));
		System.out.println(ReverseInteger.reverse(d));
		System.out.println(ReverseInteger.reverse(e));
		}
}

参考:
JAVA判断整数溢出

猜你喜欢

转载自blog.csdn.net/xihuanyuye/article/details/85125803