力扣-241为运算表达式设计优先级

题目

1.描述

给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。

2.示例

输入: "2-1-1"
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2

3.思路

使用递归, 遇到计算符号分别计算符号左侧的字符串的值以及符号右侧的值, 最后进行符号运算

4.代码

public List<Integer> diffWaysToCompute(String input) {
     List<Integer> ways = new ArrayList<>();
     for (int i = 0; i < input.length(); i++) {
         char c = input.charAt(i);
         if (c == '+' || c == '-' || c == '*') {
             List<Integer> left = diffWaysToCompute(input.substring(0, i));
             List<Integer> right = diffWaysToCompute(input.substring(i + 1));
             for (int l : left) {
                 for (int r : right) {
                     switch (c) {
                         case '+':
                             ways.add(l + r);
                             break;
                         case '-':
                             ways.add(l - r);
                             break;
                         case '*':
                             ways.add(l * r);
                             break;
                     }
                 }
             }
         }
     }
     if (ways.size() == 0) {
         ways.add(Integer.valueOf(input));
     }
     return ways;
 }

你可能感兴趣的:(每日一题,字符串,算法,java,数据结构)