classSolution{publicList<Integer>diffWaysToCompute(String expression){if(expression ==null|| expression.isEmpty()){returnCollections.emptyList();}List<Integer> res =newArrayList<>();int index =0;int count =0;while(index < expression.length()&&!isOperation(expression.charAt(index))){
count = count *10+ expression.charAt(index)-'0';
index++;}if(index == expression.length()){returnList.of(count);}// 到此判断当前expression字符串不为纯数字for(int i =0; i < expression.length(); i++){if(isOperation(expression.charAt(i))){// 这里是分,分的依据是当前字符为运算符,根据当前预算符分为2块,等它们分别得到结果,再计算当前运算符的结果List<Integer> left =diffWaysToCompute(expression.substring(0, i));List<Integer> right =diffWaysToCompute(expression.substring(i +1));// 这里是治,得到当前运算符的结果for(int lInt : left){for(int rInt : right){
res.add(calculate(lInt, expression.charAt(i), rInt));}}}}return res;}publicintcalculate(int l,char c,int r){switch(c){case'+':return l + r;case'-':return l - r;case'*':return l * r;}return0;}publicbooleanisOperation(char c){return c =='+'|| c =='-'|| c =='*';}}