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
((2
3)-(45)) = -14
((2
(3-4))5) = -10
(2
((3-4)5)) = -10
(((2
3)-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%的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值