241. 为运算表达式设计优先级-分治

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了241. 为运算表达式设计优先级-分治相关的知识,希望对你有一定的参考价值。

一、题目描述

给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。

示例 1:

输入:expression = "2-1-1"
输出:[0,2]
解释:
((2-1)-1) = 0 
(2-(1-1)) = 2

示例 2:

输入:expression = "2*3-4*5"
输出:[-34,-14,-10,-10,10]
解释:
(2*(3-(4*5))) = -34 
((2*3)-(4*5)) = -14 
((2*(3-4))*5) = -10 
(2*((3-4)*5)) = -10 
(((2*3)-4)*5) = 10

二、解题

分治

class Solution 
    public List<Integer> diffWaysToCompute(String expression) 
        List<Integer> ways = new ArrayList<>();
        for(int i = 0;i<expression.length();i++)
            char ch = expression.charAt(i);
            //遍历字符串中的运算符
            if (ch == '+' || ch == '-' || ch == '*') 
                // 分治 
                List<Integer> left = diffWaysToCompute(expression.substring(0, i));
                List<Integer> right = diffWaysToCompute(expression.substring(i + 1));
                for(int l : left)
                    for(int r : right)
                        switch(ch)
                            case '+':
                                ways.add(l+r);break;
                            case '-':
                                ways.add(l-r);break;
                            case '*':
                                ways.add(l*r);break;
                        
                    
                
             
        
        if(ways.size() == 0)
            ways.add(Integer.valueOf(expression));
        
        return ways;
    

以上是关于241. 为运算表达式设计优先级-分治的主要内容,如果未能解决你的问题,请参考以下文章

241. 为运算表达式设计优先级-分治

LeetCode 241 为运算表达式设计优先级[分治] HERODING的LeetCode之路

241. 为运算表达式设计优先级

Leetcode 241.为运算表达式设计优先级

241. 为运算表达式设计优先级

241. 为运算表达式设计优先级(递归)