【C语言刷LeetCode】241. 为运算表达式设计优先级(M)

该博客介绍了如何使用分治算法解决LeetCode中的问题241,即如何为一个包含加减乘的运算表达式添加括号,以得到不同的计算结果。通过递归地分割字符串并计算左右部分的不同结果,然后进行运算符合并,最终得到所有可能的组合。博主强调了在递归过程中处理字符串结果和内存申请的注意事项,并指出该问题的解法与二叉树和DFS有所不同,且具有一定的陷阱,需要仔细理解。
摘要由CSDN通过智能技术生成

给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。

示例 1:

输入: "2-1-1"
输出: [0, 2]
解释: 
((2-1)-1) = 0 
(2-(1-1)) = 2
示例 2:

输入: "2*3-4*5"
输出: [-34, -14, -10, -10, 10]
解释: 
(2*(3-(4*5))) = -34 
((2*3)-(4*5)) = -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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

分治算法,总算遇到了,绕不过。

此题思路:

1.找到字符串中的运算符,将字符串S分割成left和right;
2.递归求解left和right的所有可能结果,遍历求得left和right的所有结果根据运算符计算后的结果;
3.递归终止条件:字符串中已经没有运算符,将字符串转换成数字输出;

分治的思想还是递归处理,但与二叉树和dfs又有些不同,分治需要合并这一步操作。

导致每次递归下来&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值