Red: https://pdai.tech/md/algorithm/alg-core-divide-and-conquer.html
分治算法的基本思想是将一个规模为 N 的问题分解为 K 个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。@pdai
题目
(1)给表达式加括号:
Input: "2-1-1".((2-1)-1) = 0(2-(1-1)) = 2Output : [0, 2]
Ans:
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;}
