一、前言(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; //在结果里面检查是否有超出范围
}

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