核心思想:
- 逐渐遍历,如果出现符号则分为左右两侧,用于后续分治
- 两侧数值已经确定好之后再确定最开始的符号并计算最终的结果
- 如果已经只有一个数字,没有运算符号,则把这个数字直接加入到结果集中
- 注意每一次递归都定义了一个List,也就是在递归的结束都会把这个值返回给上一步的结果,用于最终的值的计算。
class Solution { public List<Integer> diffWaysToCompute(String input) { int n=input.length(); List<Integer> res= new ArrayList<>(); for(int i=0;i<n;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 j:left){ for(int k:right){ switch (c){ case '+': res.add(j+k); break;//注意switch必须有break; case '-': res.add(j-k); break; case '*': res.add(j*k); break; } } } } } if(res.size()==0) res.add(Integer.valueOf(input)); return res; } }