[LeetCode] [C++] 7. Reverse Integer 整数翻转

题目要求


Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
LeetCode 7在线测试

问题描述


翻转整数数中的所有数字。例如输入123,输出321,输入-123,输出-321.
注意:输入为32位有符号整数,如果转换后数字溢出,则直接返回0.

思路分析


通过bool值判断是否为负数,然后将负数转换为正数。再将正数的每一个数字进行vector
保存。然后先通过判断vector中每个数字判断是否会反转溢出。

代码验证

class Solution {
public:
    int reverse(int x) {
	   if (x == -2147483648) {
	       return 0;
	   }
	   
       bool minus = false;
	   if (x < 0) {
	       minus = true;
		   x = -x;
	   }
	   
	   vector<int> nums;
	   while (x) {
		   int digit = x % 10;
		   nums.push_back(digit);
		   x /= 10;
	   }
	   
	   if (nums.size() == 10) {
	       if (nums[0] > 2) {
		       return 0;
		   } else if (nums[0] == 2 && nums[1] > 1) {
		       return 0;
		   } else if (nums[0] == 2 && nums[1] == 1 && nums[2] > 4) {
		       return 0;
		   } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] > 7) {
		       return 0;
		   }  else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7
		   && nums[4] > 4) {
		       return 0;
		   }  else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7
		   && nums[4] == 4 && nums[5] > 8) {
		       return 0;
		   }  else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7
		   && nums[4] == 4 && nums[5] == 8 && nums[6] > 3) {
		       return 0;
		   }  else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7
		   && nums[4] == 4 && nums[5] == 8 && nums[6] == 3 && nums[7] > 6) {
		       return 0;
		   } else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7
		   && nums[4] == 4 && nums[5] == 8 && nums[6] == 3 && nums[7] == 6 && nums[8] > 4) {
		       return 0;
		   }  else if (nums[0] == 2 && nums[1] == 1 && nums[2] == 4 && nums[3] == 7
		   && nums[4] == 4 && nums[5] == 8 && nums[6] == 3 && nums[7] == 6 && nums[8] == 4 ) {
		       if (minus && nums[9] > 8) {
				   return 0;
			   }
			   
			   if (!minus && nums[9] > 7) {
			       return 0;
			   }
		   }
	   }
	   
	   int ret = 0;
	   for (int i = 0; i < nums.size(); ++i) {
		   ret = ret * 10 + nums[i];
	   }
	   
	   if (minus) {
	       ret = -ret;
	   }
	   
	   return ret;
    }
};

总结注意


处理各种badcase:

  1. x = -2147483648 直接返回0.
  2. 翻转后的数字x > 2147483647.其实就是判断vector中每一个数字是否超出限度。例如vector[0],
    翻转后会会处于整数最高位,如果整数位数等于10位,则翻转后必定溢出。

原创声明


作者:hgli_00
链接:http://www.cnblogs.com/lihuagang/p/leetcode_7.html
来源:博客园
著作权归作者所有,转载请联系作者获得授权。

posted @ 2017-04-26 20:53  hgli_00  阅读(201)  评论(0编辑  收藏  举报