【LeetCode】Reverse Integer解题笔记

题意:给定一个整数(包含整数、负数),反转转整数的所有位,例如传入123,传出321;传入-456,传入-654

分析:题目很基础,但是下面的提示确实会被忽略,例如题目中提到的10、100这些数的反转以及越界的问题。

边界条件:整数逆转之后,越界,例如1000000003 这个数,逆转之后,会越界,int型已经不能表示了。负数要单独拎出符号位来处理。

代码:

class Solution {
public:
	int reverse(int x) {
		// Start typing your C/C++ solution below
		// DO NOT write int main() function

		bool bNeg = x < 0 ? true : false;
		int src = abs(x);

		long long dest = 0;
		unsigned int multi = 1;

		while(src > 0)
		{
			dest += multi * src % 10;
			multi += 10;
			src /= 10;
			dest *= 10;
		}
		dest /= 10;
		if(bNeg)
		{
			dest *= -1;
		}
		
		if (dest <= INT_MAX && dest >= INT_MIN)
		{
			return (int)dest;
		}
		else
		{
			return 0;
		}
		
	}
};


上述的代码中,将要返回的dest定义为long long的类型,用以兼容int类型,同时可以判断越界问题,经过sizeof测试,long long类型在win 32位系统中,占8个字节。

代码在leetcode上提交,AC通过,一共有1020个test case。

但是对于越界的问题,本人在test case中找了,貌似没看到可以触发越界逻辑的case。上述代码对于越界的处理是直接return 0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值