7 Reverse Integer

给你一个带符号的32位的整数,给出该整数反转后的结果

注意:假设我们的环境只能处理32位有符号范围内的整数,如果反转后的整数溢出,请在你的函数中返回0。

1.  利用java自带的将字符串转为数字的方法,要注意反转后的整数是否会溢出。

        public int reverse(int x)
	{
		int maxInt = 0x7fffffff; // 32位最大正数
		int minInt = 0x80000000; // 32位最小负数
		StringBuffer sb = new StringBuffer();
		boolean flag = true; // 符号正负的标志,默认是正数
		long ans = 0;
		
		// 先判断x的正负
		if (x < 0)
		{
			// 由于最小负数,取负后还是它本身,故需特殊处理
			if (x == minInt) 
			{
				ans = 0;
				return (int)ans;
			}
			x = -x;
			flag = false;
		}
		String str = sb.append(x).reverse().toString();
		ans = Long.parseLong(str); // 这里使用parseLong是防止反转后的整数超出maxInt
		if (flag == false)
			ans = -ans;
		// 如果x比32位最大正数还要大,或者x比32位最小整数还要小时,结果会溢出
		if (ans > maxInt || ans < minInt)
		{
			ans = 0;
		}
		return (int)ans;
	}

2. 利用取模和整除运算,互换整数的高低位

        public int reverse(int x)
	{
		int maxInt = 0x7fffffff; // 32位最大正数
		int minInt = 0x80000000; // 32位最小负数
		long ans = 0;
		boolean flag = true; // 记录该数字是否是正数
		
		if (x < 0)
		{
			if (x <= minInt)
			{
				return 0;
			}
			x = -x;
			flag = false;
		}
		
		while (x > 0)
		{
			ans = ans*10 +(x % 10);
			x /= 10;
		}
		
		if (flag == false)
		{
			ans = -ans;
		}
		
		// 判断反转后的ans的情况
		if (ans > maxInt || ans < minInt)
		{
			return 0;
		}
		return (int)ans;
	}

3. 大神提供的解法

	public int reverse03(int x)
	{
		int result = 0;
		while (x != 0)
		{
			int tail = x % 10;
			int newResult = result * 10 + tail; // 如果newResult会溢出,则它的值会变小,该等式就不再成立。
			System.out.println("newResult: "+newResult + " result " + result +" tail " + tail);
			System.out.println(newResult - tail);
			System.out.println();
			if ((newResult - tail)/ 10 != result) 
			{
				return 0;
			}
			result = newResult;
			x = x / 10;
		}
		return result;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值