【LeetCode】(No.007)反转整数

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

【推荐阅读】

【LeetCode】贪心算法--划分字母区间(763)

python异常报错详解

机器学习实战--住房月租金预测(3)

猜你喜欢

转载自blog.csdn.net/sinat_34576567/article/details/86698827
今日推荐