1、題目spa
一、審題code
二、分析blog
給出一個運算式的字符串,求加上括號後的全部可能結果。遞歸
2、解答字符串
一、思路get
採用遞歸方式。input
碰到操做符後就將運算式分爲先後兩部分,遞歸調用此方法算出先後兩部分的全部運算結果。在根據此操做符將先後兩部分的結果進行操做。最終將結果存於 List中進行返回。string
能夠經過一個 Map 存儲 輸入字符串對應的運算結果,減小遞歸的次數。it
1 HashMap<String, List<Integer>> map = new HashMap<>(); 2 public List<Integer> diffWaysToCompute(String input) { 3 if(map.containsKey(input)) 4 return map.get(input); 5 6 List<Integer> ret = new LinkedList<Integer>(); 7 for (int i = 0; i < input.length(); i++) { 8 char ch = input.charAt(i); 9 if(ch == '-' || ch == '+' || ch == '*') { 10 String part1 = input.substring(0, i); 11 String part2 = input.substring(i + 1); 12 List<Integer> part1Ret = diffWaysToCompute(part1); 13 List<Integer> part2Ret = diffWaysToCompute(part2); 14 15 for(Integer p1: part1Ret) { 16 for(Integer p2: part2Ret) { 17 int c = 0; 18 switch (ch) { 19 case '+': c = p1 + p2; 20 break; 21 case '-': c = p1 - p2; 22 break; 23 case '*': c = p1 * p2; 24 break; 25 } 26 ret.add(c); 27 } 28 } 29 } 30 } 31 if(ret.size() == 0) 32 ret.add(Integer.valueOf(input)); 33 map.put(input, ret); 34 return ret; 35 }