查看原文
其他

【打卡贴】(No.007)反转整数

Ahab Ahab杂货铺 2019-02-15

击上方“Ahab杂货铺”,选择“置顶公众号”

技术分享第一时间送达!


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






欢迎您的点赞和分享

▲长按关注此公众号


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存