class Solution {
public List<Integer> diffWaysToCompute(String expression) {
//分治法来实现
//每一次递归都new一个ans,返回第一次的ans
ArrayList<Integer> result = new ArrayList<>();
//每一次递归,都在当前字符串中先找到第一个运算符
int start;
for(start = 0; start < expression.length(); start++){
if (Character.isDigit(expression.charAt(start)))
continue;
else break;
}
//start存储的就是第一个运算符的位置
//如果此时已经到头说明整个字符串都是数字,那么直接返回当前字符串
if (start == expression.length()){
result.add(Integer.parseInt(expression));
return result;
}
//如果有运算符,那么就递归,因为一边可能存在多个运算符,所以从start开始往后遍历
for(int i = start;i < expression.length(); i++){
char c = expression.charAt(i);
//如果是数字就跳过
if (Character.isDigit(c))
continue;
//如果是运算符,则递归当前方法,分别得到当前运算符左边和右边的所有可能的值
List<Integer> left = diffWaysToCompute(expression.substring(0,i));
List<Integer> right = diffWaysToCompute(expression.substring(i + 1));
for (Integer a : left) {
for (Integer b : right) {
result.add(compute(a,b,c));
}
}
}
return result;
}
public Integer compute(int a,int b,char c){
if (c == '+')
return a+b;
if (c == '-')
return a -b;
else
return a * b;
}
}
leetcode 分治法为运算表达式计算值
最新推荐文章于 2024-08-10 22:52:22 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)