[Leetcode7]之Reverse Integer
2018-03-25 18:28
309 查看
原题:
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 hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
题目要求输入的数字x不能超出32位有符号整数的范围,否则输出0,这里就涉及到一个判断数字overflow的问题。
代码:class Solution {
public:
int reverse(int x) {
int ans = 0;
bool isNegative = x < 0;
if (isNegative)
x = -x;
while (x){
int temp = ans * 10 + x % 10;
if (temp / 10 != ans) // check overflow
return 0;
ans = temp;
x /= 10;
}
if (isNegative)
return -ans;
else
return ans;
}
};这里为何对
我开始也不太理解,后来在上面看到了一个大神@harinarayanabatta1997的解释,豁然开朗。
2147483647
-2147483648
-2147483647so this process continues to cycle. so
output:
2147483647
-1
214748364
hope this will help you.(希望也能帮助你的理解)
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 hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
题目要求输入的数字x不能超出32位有符号整数的范围,否则输出0,这里就涉及到一个判断数字overflow的问题。
代码:class Solution {
public:
int reverse(int x) {
int ans = 0;
bool isNegative = x < 0;
if (isNegative)
x = -x;
while (x){
int temp = ans * 10 + x % 10;
if (temp / 10 != ans) // check overflow
return 0;
ans = temp;
x /= 10;
}
if (isNegative)
return -ans;
else
return ans;
}
};这里为何对
temp / 10 != ans进行判断呢?
我开始也不太理解,后来在上面看到了一个大神@harinarayanabatta1997的解释,豁然开朗。
printf("%d\n",2147483647); //max value of an int; printf("%d\n",2147483648); //max value of an int+1; printf("%d\n",2147483649); //max value of an int+2;output:
2147483647
-2147483648
-2147483647so this process continues to cycle. so
(temp/10)!=ans;implies that the number has overflown since when the number starts to overflow we can notice the difference between
tempand
ans.
int max = 2147483647; int test = 214748364; int temp1 = (2147483647*10); //int temp1 = (max*10); int temp2 = (214748364*10); //int temp2 = (test*10); printf("%d\n",max ); printf("%d\n",temp1/10 ); //temp1/10!=max (overflow); printf("%d\n",temp2/10 ); //temp2/10==test; (no overflow);
output:
2147483647
-1
214748364
hope this will help you.(希望也能帮助你的理解)
相关文章推荐
- [LeetCode][7]Reverse Integer解析与位运算实现 -Java实现
- leetcode Reverse Integer
- leetcode:Reverse Integer(反转数字)【算法面试题】
- [leetcode] Reverse Integer 反转一个整数
- LeetCode: Reverse Integer
- 2017-09-08 LeetCode_007 Reverse Integer
- Reverse Integer LeetCode
- [LeetCode] 087: Reverse Integer
- leetcode题解||Reverse Integer 问题
- leetcode Reverse Integer
- Reverse Integer LeetCode 第七题
- LeetCode 7 :Reverse Integer ---- 反转int整数
- LeetCode Reverse Integer
- leetcode 7&9 : Reverse Integer & Palindrome Number
- leetcode Reverse Integer
- leetcode Reverse Integer
- LeetCode刷题(C++)——Reverse Integer(Easy)
- Reverse Integer && Palindrome Number-LeetCode
- Leetcode_Reverse Integer(考虑了溢出情况)
- [置顶] [LeetCode] Reverse Integer 整数反转