LeetCode String to Integer (atoi) (正则表达式)

传送门

题意:

很easy的一道题啊,就是实现一些c语言atoi()将字符转化为integer的函数.

思路:

按照题目要求,然后注意下细节其实就可以了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution:
def myAtoi(self, _str):
_str = _str.strip()
if _str == "":
return 0
_len,flag = 0,0
if _str[0] == '-' or _str[0] == '+':
flag = 1
for i in _str[flag:]:
if i >= '0' and i <= '9':
_len += 1
else:
break
if _len == 0:
return 0
ans = int(_str[:_len + flag])
if ans < -2**31:
return -2**31
elif ans > 2**31 - 1:
return 2**31 - 1
else:
return ans

但是记录下来 主要是该题可以使用python中的正则表达式(regular expression)来简单的完成.
首先我们先总结下py中的正则表达式.

正则表达式

部分转载来源
正则表达式并不是python本身的一部分,它是一个极其强大的处理字符串的工具,被集成在re模块中.
下图列出了python支持的正则表达式元字符和语法:

贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串.python里数量词默认是贪婪的,总是尝试尽可能匹配更多的字符,非贪婪的则相反,它总是尝试匹配尽可能少的字符.例如:正则表达式”ab“如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab?”,将找到”a”。

re模块


本题中我们需要使用re中的search和match object的group即可.
正则表达式为:r”^ *[-+]?[0-9]+”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
match = re.search(r"^ *[-+]?[0-9]+", str)
if match:
match = int(match.group())
if match < -2**31:
return -2**31
elif match > 2**31-1:
return 2**31-1
return match

return 0


-------------本文结束感谢您的阅读-------------


本文标题:LeetCode String to Integer (atoi) (正则表达式)

文章作者:Statusrank

CSDN博客欢迎来访!

发布时间:2019年01月09日 - 19:01

最后更新:2019年01月09日 - 20:01

原始链接:https://statusrank.xyz/articles/194c9918.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

万水千山总是情,就给五毛行不行!