python re正则表达式以及LeetCode241
Python re正则表达式
re — 正则表达式操作
Python中的re模块–正则表达式
Python 中re.split()方法
LeetCode241:为运算表达式设计优先级
问题描述
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
示例 1:
输入: “2-1-1”
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
示例 2:
输入: “23-45”
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(45))) = -34
((23)-(45)) = -14
((2(3-4))5) = -10
(2((3-4)5)) = -10
(((23)-4)*5) = 10
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses
问题分析
这个用分治是个很好的解决方案,方法是,循环遍历式子中的每个位置,如果这个位置是运算符,那么把左右的式子分别计算值,然后用运算符拼到一起。如果上面这个遍历中没有遇到运算符,那么res数组就是空的,这时input是个数字,所以结果把这个数字放进去,再返回即可。
解法
def diffWaysToComputer(self, input):
res = list()
N = len(input)
for i in range(N):
if input[i] == '*' or input[i] == '+' or input[i] == '-':
lefts = self.diffWaysToComputer(input[:i])
rights = self.diffWaysToComputer(input[i+1:])
for left in lefts:
for right in rights:
if input[i] == '+':
res.append(left + right)
elif input[i] == '-':
res.append(left - right)
elif input[i] == '*':
res.append(left * right)
if not res:
res.append(int(input))
return res
运行结果:
执行用时 :56 ms, 在所有 Python3 提交中击败了86.74%的用户
内存消耗 :13.8 MB, 在所有 Python3 提交中击败了6.95%的用户