为运算表达式设计优先级

这篇博客介绍了LeetCode上的问题241,目标是为给定的运算表达式添加括号以改变运算优先级。文章提供了两种解法:递归和动态规划。递归解法通过运算符将表达式分成两部分;动态规划解法通过定义dp数组来计算不同数字之间的运算结果,并确定运算符的选择。博客作者提供了详细的解题思路和代码实现。
摘要由CSDN通过智能技术生成

LeetCode 241

为运算表达式设计优先级

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

示例 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

解法1:递归

可以通过运算符将每一个式子分成两部分,如例二

2*3-4*5可以通过运算符分成

  • 2 * (3-4*5)

    • 2 * (3-(4*5)) = -34
    • 2 * ((3-4)*5) = -10
  • (2*3) - (4*5) = -14

  • (2*3-4) * 5

    *((2*3)-4) * 5 = 10
    *(2*(3-4)) * 5 = -10

代码实现如下:

class Solution {
//添加一个 map来保存每一个计算过的式子
    HashMap<String,List<Integer>> map = new HashMap<>();
    public List<Integer> diffWaysToCompute(String input) {
        if (input.length() == 0) 
        {
            return new ArrayList<>();
        }
        //如果已经有当前解了,直接返回
        if(map.containsKey(input))
        {
            r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值