题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例1
输入: -123
输出: -321
示例2:
输入:-1200
输出:-21
代码实现:
1 def reverse(x): 2 ''' 3 32位 有符号整数反转 4 :param x: 5 :return: 6 ''' 7 result = "" 8 right = 0 9 # 使用字符串切片形式进行反转 10 res = str(x)[::-1] 11 print(res) 12 # 负号判断+去零操作 13 num = 0 # 和首位相加是否为0来判断首位是否为0 为0:首位为0,不为0:首位不为0,继续第二位:若为0:第二位仍为0,否则继续相加 14 if res[-1] == "-": 15 result += res[-1] 16 while right < len(res) - 1: 17 num += int(res[right]) 18 if num == 0: # 为0,继续下一位 19 right += 1 20 else: 21 result += res[right] 22 right += 1 23 else: 24 while right < len(res): 25 num += int(res[right]) 26 if num == 0: # 为0,继续下一位 27 right += 1 28 else: 29 result += res[right] 30 right += 1 31 print(int(result)) 32 if result != "" and int(result) <= pow(2, 31) - 1 and int(result) >= pow(-2, 31): 33 return int(result) 34 else: 35 return 0 36 37 38 print('---------测试resverse()-----------') 39 x = -901000 40 result = reverse(x) 41 print("result=", result) 42 43 44 def reverse1(x): 45 ''' 46 47 :param x: 48 :return: 49 ''' 50 x = str(x) 51 res = "" 52 if x[0] != "-": # 正数 53 x = x[::-1] 54 x = int(x) 55 elif x[0] == "-": # 负数 56 res += "-" 57 x = x[1:][::-1] 58 res += x 59 x = int(res) 60 else: # 零 61 x = int(x) 62 63 return x if x >= pow(-2, 31) and x <= pow(2, 31) - 1 else 0 64 65 66 print('---------测试resverse1()-----------') 67 x = 0 68 result = reverse1(x) 69 print("result=", result) 70 71 72 def reverse2(x): 73 ''' 74 75 :param x: 76 :return: 77 ''' 78 flag = 0 if x < 0 else 1 79 x = int(str(abs(x))[::-1]) 80 x=x if flag == 1 else -x 81 return x if x >= pow(-2, 31) and x <= pow(2, 31) - 1 else 0 82 83 # x=abs(x) 84 # x=str(x) 85 # x=x[::-1] 86 # x=int(x) 87 88 89 print('---------测试resverse2()-----------') 90 x = 1534236469 91 result = reverse2(x) 92 print("result=", result)
输出:
---------测试resverse()----------- 000109- -109 result= -109 ---------测试resverse1()----------- result= 0 ---------测试resverse2()----------- result= 0
总结:方法1考虑的太复杂,思想有冗余,代码是思想的外在表现,当然也有冗余,存在大量的重复代码,把一个问题想的太复杂了,不可取但却是我首次想到的方法,从这个立场来说,方法1必不可少,是后面代码优化和精简的基石。
方法2:从整数分类出发,判断正数、负数和零三种不同的情况。使用到了强制类型转换时的初始位为0时的舍去操作。代码精简了许多
方法3:先记录下数的类型,正数负数还是零,然后从绝对值角度出发,代码更精简。