LeetCode7.python实现:整数反转实例☆

问题:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。


示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。


解题思路:

     分析:要将指定的整数进行反转,无疑就是将该整数不断进行对10取余操作对10整除操作。这里要注意一个问题:负数和正数的整除和取余结果的不同。正数的整除和取余,我们耳熟能详,但对于负数,或许会稍有疑惑,比如 -4,整除10等于-1,对10取余等于6。但是,我们希望无论是正数,还是负数,都可以进行同样的操作,而这,并不难实现。

基于此,详细步骤如下

     1)正负数的判断并将负数变为正数。假定指定的整数为X,则先判断X是正数还是负数(注意:此处我们忽略了0),若为负数,则变为正数。因此,需要一个标记,也就是来一个flag变量,默认值我们设定为False,即为正数,当flag为True时,也就表示指定值为负数,这个我们会在第三步中用到;

    2)反转数的存储。这里,我用列表来存储反转数。先存储变量对10的取余值(这里,我考虑将反转数的每位数先字符存储,然后拼接成字符串,最后进行类型转换实现整数的输出,因此,在程序实现的的列表添加取余值时,用了str()进行类型转换。当然,也可以直接进行类同反转数的操作,每迭代一次,就进行之前的数乘以10并加上当前取余的值的操作来实现,不过感觉没有直接类型转换程序运行快吧),将变量变为对10整除后的值,直到变量对10整除为0为止;

    3)字符串拼接,类型转换。第二步中,我们用字符列表存储了反转的每一位数,因此,现在我们要将反转后的每位数,拼接到一起了,如果flag为True,则在拼接的字符串前面,在拼接上字符'-';

    4)题干注意事项的判断,结果返回。这不无须解释,按照题干的注意提醒操作即可,然后返回最终值。


python程序具体实现如下

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        # 特殊情况一 : 0值的判断,直接输出
        if x==0 :          
            return 0
        
        # 一般情况的调整翻转
        xlist =[]      # 存储反转的数字
        flag = False   # 默认为正数的标记
        if x<0:
            x = abs(x)
            flag = True 
        
        while x>0:
            xlist.append(str(x%10))   # 顺序存储每位反转数,注意字符形格式
            x = x//10                 # 整除操作
        
        result = None                 # 将xlist中的字符,顺序拼接
        if flag:
            result = '-'+''.join(xlist)
        else:
            result = ''.join(xlist)
        result =  int(result)         # 将反转的数字字符串格式转换
        
        # 特殊情况二:反转后的溢出判断
        if result >2**31-1 or result<-2**31:
            return 0
        else:
            return result

题外话:

    这道题是LeetCode中标记为简单的题目,但我还是提交错了三次,第一次是忽略了0值本身的反转输出;第二次是程序填了0值判断,代码进行调整后,忽视所致的错误;第三次就是注意事项的忽视所致。第四次正确提交。如下的两张图,为同一代码两次的执行结果图,可以发现,系统运行的快慢其实也是一个随机事件(并非随机哈),但不管怎样,精益求精,设计更快捷高效的算法,才是正途。

猜你喜欢

转载自blog.csdn.net/weixin_42521211/article/details/88043531