JalanJiang/leetcode-notebook

241. 为运算表达式设计优先级

Closed this issue · 3 comments

  • 题解
  • 总结:已运算符为中间点拆分子问题
  • 完成时间:2019/08/20
class Solution {
    public List<Integer> diffWaysToCompute(String input) {
        return partition(input);
    }

    private List<Integer> partition(String input) {
        List<Integer> result = new LinkedList<>();
        if (!input.contains("+") && !input.contains("-") && !input.contains("*")) {
            result.add(Integer.valueOf(input));
            return result;
        }

        for (int i = 0; i < input.length(); i++) {
            char value = input.charAt(i);
            if (value == '+' || value == '-' || value == '*') {
                for (int a: partition(input.substring(0, i))) {
                    for (int b: partition(input.substring(i + 1))) {
                        if (value == '+') {
                            result.add(a + b);
                        } else if (value == '-') {
                            result.add(a - b);
                        } else {
                            result.add(a * b);
                        }
                    }
                }
            }
        }


        return result;
    }
}
class Solution {
    public List<Integer> diffWaysToCompute(String input) {
        return partition(input);
    }

    private List<Integer> partition(String input) {
        List<Integer> result = new LinkedList<>();
        if (!input.contains("+") && !input.contains("-") && !input.contains("*")) {
            result.add(Integer.valueOf(input));
            return result;
        }

        for (int i = 0; i < input.length(); i++) {
            char value = input.charAt(i);
            if (value == '+' || value == '-' || value == '*') {
                for (int a: partition(input.substring(0, i))) {
                    for (int b: partition(input.substring(i + 1))) {
                        if (value == '+') {
                            result.add(a + b);
                        } else if (value == '-') {
                            result.add(a - b);
                        } else {
                            result.add(a * b);
                        }
                    }
                }
            }
        }


        return result;
    }
}