241. 为运算表达式设计优先级
【题目】:
【代码】:分治法
class Solution {
public List<Integer> diffWaysToCompute(String input) {
List<Integer> res=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 '+':
res.add(l+r);
break;
case '-':
res.add(l-r);
break;
case '*':
res.add(l*r);
break;
}
}
}
}
}
//纯数字,没有运算符,可能是多位数
if(res.size()==0){
res.add(Integer.valueOf(input));
}
return res;
}
}
效果: