NO.7 反转整数
原题:
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
这个题其实是16年网易秋招的面试编程题,附上原题
如下是16年网易秋招的笔试编程题
对于一个整数X,定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如:
如果 X = 123,则rev(X) = 321;
如果 X = 100,则rev(X) = 1.
现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?
输入描述:
输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。
输出描述:
输出rev(rev(x) + rev(y))的值
输入例子:
123 100
刚看到题首先想到的是利用切片得到答案,利用R = X[::-1]
这种方法对X进行一个反转复制的操作。不得不说这是一波骚操作。
class Solution: def reverse(self, x): flag = 1 if x < 0: flag = -1 x = -x R = str(x)[::-1] R = int(R) if R> 2147483647 or R < -2147483648: R = 0 return R*flag
方法二是对输入数字进行乘除和取余运算,并把输出值乘以10后与每次取余的结果相加,直到原数据变为0。同时题目明确提出要对输出的整数进行限制,所以在返回时需要加上判断条件。
class Solution: def reverse(self, x): # 返回值 R = 0 # 标记输入值的正负 flag = 1 if x<0: x = abs(x) # 输入是负数 flag = -1 while x != 0: R = R*10+x%10 x = x//10 # 判断是否越界 if -2147483647<R< 2147483648: return R*flag else: return 0
【推荐阅读】