题目要求
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.
问题描述
翻转整数数中的所有数字。例如输入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 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
链接: 来源:博客园 著作权归作者所有,转载请联系作者获得授权。