Leetcode 241. Different Ways to Add Parentheses (python+cpp)

本篇博客介绍LeetCode 241题目的解决方法,采用分治算法。通过递归将加括号问题转化为子问题求解,针对不同运算符号的位置组合,计算所有可能的结果。文章提供了Python和C++两种实现,并强调了边界条件处理和结果去重的重要性。
摘要由CSDN通过智能技术生成

Leetcode 241. Different Ways to Add Parentheses

题目

在这里插入图片描述

解法:divide and conquer

这道题目用的是分治法,分治法是递归的把问题拆分为子问题,然后对子问题分别求解。我们熟悉的动态规划就是分治法的一种。

对于这道题目,关键在于这个加括号的操作如何进行转化。对于加括号来说,无非就是改变式子某些部分的运算优先级,换言之就是哪个子问题先算,哪个子问题后算的问题。通过观察我们可以发现,加括号的操作可以变成对于某个运算符号两边的左右子问题分别计算的操作。比如对于上面第二个例子,“2x3-4x5"对应的第二种可能性((2x3)-(4x5)) = -14 ,对应的就是首先计算”-"两边的左右子问题,然后对于左右子问题有分别计算求解的顺序。对于最后的答案就是左右两边子问题的所有可能性进行组合。总结来说就是把加括号的操作变成() ? ()的表达,对于?选取所有可能位置的运算符号,而对于()内的内容,递归的进行拆分,知道左右两边只包含数字可以直接进行计算。

有两个需要注意的地方:

  • 对于边界情况的处理,当某一边只有数字而没有运算符的情况的时候,说明这个字问题无需任何操作,直接以这个数字作为结果进行返回即可
  • 观察到给出的例子里有重复的结果,所以对于所有结果,我们无需任何判断,直接把所有遍历的结果放入列表即可

python代码如下:

class Solution:
    def diffWaysToCompute(self, input: str) -> List[int]:	
    	if input.isdigit():
            return [int(input)]
        res = []
        for i in range(len
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值