一、前言(2/4)

最近是些事情太忙了,还是抽空写了一下算法题。这是本周的第二道算法题,也是算法系列里面的第二道题,希望自己可以加油坚持。

二、算法题目

(这个题感觉不太难)

三、题目分析

1、我的分析

给了一个限定的条件32为有符号整数,也就是在整体上面进行旋转,无小数,但是有负数。Python3里面类型转换的优势可以立马体现出来。

#encoding:utf-8
class Solution:
    def reverse(self,x):
        if x>=0 :
            reverse_x=int(str(x)[::-1])
        else:
            reverse_x=-int(str(x)[:0:-1])

        if -2**31<reverse_x<2**31-1:
            return reverse_x
        else:
            return 0

#as checking
x=-120
solution = Solution()
y=solution.reverse(x)
print(y)
结果是对的,但是处理的速度和内存消耗啥的不太妙

2、其他的分析

(Python3)

①使用递归的方法解决整数反转

#encoding:utf-8
class Solution:
    def reverse(self,x):
        def function(x,res=0):
            x=x if x>=0 else -x
            if x == 0:
                return res
            res = res*10 + x%10    #个、十、百的这样一层一层运算相加,从而最后一位变第一位
            w=function(x//10,res)    #将x的个十百一层一层的减掉
            if res> 2**31:
                return 0
            return w
        return function(x) if x>=0 else -1*function(x)

#as checking
x=123
solution = Solution()
y=solution.reverse(x)
print(y)
运算的速度确实快了不少但是消耗的内存还是大

②使用二进制的进制移动方法进行求解(但是我现在还没有搞懂)

def reverse(self,x):
       y, res = abs(x), 0
       # 则其数值范围为 [−2^31,  2^31 − 1]
       boundry = (1<<31) -1 if x>0 else 1<<31
       while y != 0:
           res = res*10 +y%10
           if res > boundry :
               return 0
           y //=10
       return res if x >0 else -res

(C语言)

int reverse(int x){
    long count=0;
    while(x!=0){
        count=count*10+x%10;
        x=x/10;
    }
    return count>2147483647||count<-2147483648?0:count;    //在结果里面检查是否有超出范围
}
歌颂C语言!!ohhhhhhh!!!

四、学到了什么?

有1说1,这次的题比较简单,在大一学习c语言的时候就已经会了这种运算方式。所以这次运用了两种语言,但是到了后期我还是会去看一下Python第二种二进制的方法。