分治---给表达式加括号

给表达式加括号

241. Different Ways to Add Parentheses (Medium)

Input: "2-1-1".

((2-1)-1) = 0
(2-(1-1)) = 2

Output : [0, 2]
题目描述:

  给出一个只有加,减,乘运算的表达式,要求在这个表达式中添加合理的括号,返回所有填上括号后的计算结果。

思路分析:

  考虑到每一个操作符(+,-,*),每一个操作符实际上是将表达式拆成了左右两部分。以2-1-1为例,第一个“-”,将表达式分成了两部分,分别是2,和1-1,那么就可以假定添加括号的结果是(2)-(1-1),同样的对左右两边进行操作,就将问题规模进行了缩小。直到不能拆分,直接返回。可以发现,到最后面,整个表达式都被拆分成一个一个数,然后逐层向上返回,将左右两边返回的结果进行不同的运算,继续向上返回。

代码:
public List<Integer>diffWaysToCompute(String input){
    List<Integer>ways=new ArrayList<>();
    for(int i=0;i<input.length();i++){
        char c=input.charAt(i);
        if(c=='+'||c=='-'||c=='*'){
        List<Integer>left=diffWaysToCompute(input.substring(0,i));
                    List<Integer>right=diffWaysToCompute(input.substring(i+1));
            for(int l:left){
                for(int r:right){
                    switch(c){
                        case '+':
                            ways.add(l+r);
                            break;
                        case '-':
                            ways.add(l-r);
                            break;
                        case '*':
                            ways.add(l*r);
                            break;
                    }
                }
            }
        }
    }
    if(ways.size()==0)
        ways.add(Integer.valueOf(input));
    return ways;
}

转载于:https://www.cnblogs.com/yjxyy/p/11107165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值