Leetcode 面试题67.字符串转换成整数

解题思路

法一:就是纯条件判断解法
法二:正则表达式匹配,用findall或者match

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class Solution:
def strToInt(self, str: str) -> int:
# 法一
start = 0
end = 0
result = ''
symbol = ''
max_ = 1<<31-1
min_ = 1>>31
includezero = True
firstblank = 0
str = str.strip()
if str == '':
return 0
if str[0] == '+':
symbol = 'plus'
start += 1
end += 1
elif str[0] == '-':
symbol = 'minus'
start += 1
end += 1
elif ord(str[0]) < 48 or ord(str[0]) > 57:
return 0
for i in range(start,len(str)):
if ord(str[i])== 48 and includezero:
continue
if ord(str[i]) >= 48 and ord(str[i]) <= 57:
includezero = False
result += str[i]
end += 1
else:
break
result = int(result) if result != '' else 0
if symbol == 'plus' and result > (1<<31)-1:
return (1<<31)-1
elif symbol == 'plus':
return result
if symbol == 'minus' and result*-1 < -(1<<31):
return -(1<<31)
elif symbol == 'minus':
return result*-1
if symbol == '':
if result < -(1<<31):
return -(1<<31)
if result > (1<<31)-1:
return (1<<31)-1
return result




# 法二
# int 可以直接去掉0
import re
max_ = (1<<31)-1
min_ = -(1<<31)
try:
result = int(re.match('[\+\-]?\d+',str.strip()).group(0))
except:
return 0
return max(min(result,max_),min_)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!