[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:
- x = -2147483648 直接返回0.
- 翻转后的数字x > 2147483647.其实就是判断vector中每一个数字是否超出限度。例如vector[0],
翻转后会会处于整数最高位,如果整数位数等于10位,则翻转后必定溢出。
原创声明
作者:hgli_00
链接:http://www.cnblogs.com/lihuagang/p/leetcode_7.html
来源:博客园
著作权归作者所有,转载请联系作者获得授权。