241. Different Ways to Add Parentheses

    /*
     * 241. Different Ways to Add Parentheses
     * 2016-6-18 by Mingyang
     * 这个题目刚开始的时候非常难以思考,一直在纠结如何去插,如何去计算
     * 后面参考了一下答案以后发现这个题目非常的有意思
     * 左右子串分别计算所有可能,然后全排列。
     * 左半块有一系列的结果,右板块有一系列的结果,分别选一个
     */
     public static List<Integer> diffWaysToCompute(String input) {  
            List<Integer> res = new ArrayList<Integer>();  
            for(int i=0;i<input.length();i++){  
                int c = input.charAt(i);  
                if(c=='+' || c=='-' || c=='*') {  
                    List<Integer> leftList = diffWaysToCompute(input.substring(0,i));  
                    List<Integer> rightList = diffWaysToCompute(input.substring(i+1));  
                    for(int left : leftList){  
                        for(int right : rightList){  
                            int t = 0;  
                            switch(c){  
                                case '+': t = left + right;  
                                    break;  
                                case '-': t = left - right;  
                                    break;  
                                case '*': t = left * right;  
                                    break;  
                            }  
                            res.add(t);  
                        }  
                    }  
                }  
            }  
            if(res.size()==0){  
                res.add(Integer.valueOf(input));  
            }  
            return res;  
        }  
原文地址:https://www.cnblogs.com/zmyvszk/p/5597352.html