/* * 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; }