• 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     }
  • 相关阅读:
    有限制的最大连续和问题
    Codevs 5056 潜水员
    Codevs 1958 刺激
    Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
    [NOIP2014]解方程
    Codevs 3729 飞扬的小鸟
    Codevs 1689 建造高塔
    Codevs 2102 石子归并 2
    C语言基础之进制的那些事(1)
    指针
  • 原文地址:https://www.cnblogs.com/skillking/p/9988935.html
Copyright © 2020-2023  润新知