241. Different Ways to Add Parentheses

一、题目

  1、审题

  

  2、分析

    给出一个运算式的字符串,求加上括号后的所有可能结果。

 

二、解答

  1、思路

    采用递归方式。

    碰到操作符后就将运算式分为前后两部分,递归调用此方法算出前后两部分的所有运算结果。在根据此操作符将前后两部分的结果进行操作。最终将结果存于 List中进行返回。

    可以通过一个 Map 存储 输入字符串对应的运算结果,减少递归的次数。

  

 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     }

 

posted @ 2018-11-20 14:51  skillking2  阅读(191)  评论(0编辑  收藏  举报