leetcode之为运算表达式设计优先级(分治算法)

图示

class Solution {
    
    
    public List<Integer> diffWaysToCompute(String expression) {
    
    // 计算算式 expression 所有可能的运算结果
        List<Integer> res = new ArrayList<>();
        for(int i = 0; i < expression.length(); i++){
    
    
            char c = expression.charAt(i);
            // 扫描算式中的运算符
            if(c == '+' || c == '-' || c == '*'){
    
    
                // 以运算符为中心,分割成两个字符串,分别递归计算(分)
                List<Integer> left = diffWaysToCompute(expression.substring(0, i));
                List<Integer> right = diffWaysToCompute(expression.substring(i + 1, expression.length()));
                // 通过子问题的结果,合成原问题的结果(治)
                for(int num1 : left){
    
    
                    for(int num2 : right){
    
    
                        if(c == '+'){
    
    
                            res.add(num1 + num2);
                        }else if(c == '-'){
    
    
                            res.add(num1 - num2);
                        }else{
    
    
                            res.add(num1 * num2);
                        } 
                    }
                }
            }
        }
        if(res.isEmpty()){
    
    // 如果 res 为空,说明传来的字符串只有一个数字,没有运算符
            res.add(Integer.parseInt(expression));
        }
        return res;
    }
}

おすすめ

転載: blog.csdn.net/weixin_46497503/article/details/117535650