声明:题目解法使用c++和Python两种,重点侧重在于解题思路和如何将c++代码转换为python代码。
题意:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
题意
给你一个整数,若这个数在有符号32位范围内逆序变化输出,超出输出0。
思路:C++语言:
获取有符号int的范围(这里用到了位运算的小技巧),判断逆序后的数是否在int范围内。
class Solution {
public:
int reverse(int x)
{
int min = (1<<31)*(-1), max = (1<<31)-1;
long long int now = 0;
while(x)
{
now = now * 10 + x % 10;
x = x / 10;
}
if(now < min || now > max)
return 0;
return now;
}
};
思路:python语言:
在python中“%”为取余运算中
-9 % 5 = 5
9 % -5 = -5
没有c ++中方便,这点比较麻烦,所以我们不如求逆序之前先判断数的正负号。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
min = -2147483648
max = 2147483647
now = 0
flag = 0 #代表非负数
if x < 0:
x = -x
flag = 1
while x :
now = now * 10 + x % 10
x = x / 10
if flag == 1:
now = -now
if now < min or now > max:
return 0
return now
Github本题题解:https://github.com/xuna123/LeetCode/blob/master/Leetcode%23%207.%20Reverse%20Integer.md