Given a 32-bit signed integer, reverse digits of an integer.
Note:
Assume we are dealing with an environment that 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.
Example 1:
Input: x = 123
Output: 321
Example 2:
Input: x = -123
Output: -321
Example 3:
Input: x = 120
Output: 21
Example 4:
Input: x = 0
Output: 0
Constraints:
-231 <= x <= 231 - 1
思路:(大姐算我求你,你别心算了行吗(▼ヘ▼#))
反转整数与反转字符串类似,可以考虑使用辅助栈或数组,对于整数的入栈和出栈操作可使用数学方法
pop 得到尾数 | 3 | 2 | 1 |
x 去掉尾数 | 12 | 1 | 0 |
rev 反转关键 | 3 | 32 | 321 |
//pop operation:
pop = x % 10; //pop得到尾数
x /= 10; //x去掉尾数成为下一个待操作数
//push operation:
temp = rev * 10 + pop;
rev = temp;
int reverse(int x){
int rev=0;
while(x!=0){
int pop = x % 10;
x / = 10;
if(rev > 2147483647 / 10 || ( rev == 2147483647 / 10 && pop < 2147483647 % 10)) return 0;
if(rev < -2147483647 / 10 || ( rev == -2147483647 / 10 && pop < -2147483647 % 10)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
- int的范围是:+-2147483647
- 注意:rev = rev * 10 + pop;表达式中对大数操作可能发生溢出,所以使用if语句来避免
- pop < -2147483647 % 10,因为rev管不了个位的范围