RounieJane

leetcode7之整数反转

题目描述:

给出一个 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:先记录下数的类型,正数负数还是零,然后从绝对值角度出发,代码更精简。

posted on 2020-07-03 21:11  RounieJane  阅读(152)  评论(0编辑  收藏  举报

导航