7. Reverse Integer - LeetCode

7. Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:

Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

Solution:

不需要重新写大整数类

  • 1, 位数*10代表着升位。
  • 2, 可通过乘10再除以10是否相等来判断是否溢出

AC的解法:

class Solution {
public:
int reverse(int x) {
int result = 0, judge = 0;
while (x) {
judge = result * 10;
if (judge / 10 != result) {
return 0;
}
result = judge;
result += x % 10;
x /= 10;
}
return result;
}
};

之前错误百出的解法:

class Solution {
public:
int reverse(int x) {
if (x < pow(-2, 31) || x > pow(2, 31) - 1) return 0;
vector<int> nums;
while (x) {
nums.push_back(x % 10);
x /= 10;
}
int ans = 0, n = nums.size();
for (int i = n-1; i >= 0; i--) {
int d = pow(10, i) * nums[n-1-i];
printf("d = %d\n", d);
if (d % 10 == 0 || d == 1 || d == -1) {
if ((ans > pow(2, 31) - 1 - d) || (ans < pow(-2, 31) - d))
return 0;
ans += d;
} else {
return 0;
}
// if (ans < pow(-2, 31) || ans > pow(2, 31) - 1) return 0;
}
return ans;
}
};