zoukankan      html  css  js  c++  java
  • 分治---给表达式加括号

    给表达式加括号

    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;
    }
    
  • 相关阅读:
    mysql查看每张表的空间使用情况
    下一步开发的技术点
    技术体系需要继续探索的东西
    架构体系需要进一步研究探索的V2路线图
    串行写队列的MYSQL大文本参数
    Node.js 数据存储方式的选择
    Node.js npm 详解
    Node入门
    Node.js知识点学习
    为什么应使用 Node.js
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11107165.html
Copyright © 2011-2022 走看看