python学习——leetcode第七题Reverse Integer

来源:互联网 发布:项目数据分析师含金量 编辑:程序博客网 时间:2024/06/05 03:25

题目说明:
Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

翻译过来:
给一个数字,将其反转过来,超过2**31的话,就返回0

我的解法还停留在高中数学阶段,按照数学的方法进行解答,比如123,首先得到除以10的余数,3,将其乘以100……依次进行。对于负数的话,转化成正数,按照同样的方式进行计算。

将数学语言翻译成程序语言为:

class Solution(object):    def reverse(self, x):        """        :type x: int        :rtype: int        """        a = 0        if x >= 0:            b = len(str(x))            for i in range(b):                a = a + (x%10) * (10**(b-i-1))                x = x // 10            if a > 2**31:                return 0            else:                return a        else:            y = abs(x)            b = len(str(y))            for i in range(b):                a = a + (y%10) * (10**(b-i-1))                y = y // 10            if a > 2**31:                return 0            else:                return -a    

很繁琐,很复杂,完全没有python之美。

看看别人的回答吧:

def reverse(self, x):    s = cmp(x, 0)    r = int(`s*x`[::-1])    return s*r * (r < 2**31)

简直美的不要不要的,将该数字转化成字符串,采用切片的方法对其进行反转,最后返回的结果还包含一个判断语句。

很明显自己还有很长的路要走!

注:
cmp(x,y) 函数,比较x,y两个数值的大小,若x>y,则返回1;若x<,返回-1;x=y,返回0.
不过cmp(x,y) 函数在python3.0中被取消了。
可以用operater模块来代替,具体用法,可以查找相关参考文档。

原创粉丝点击