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. 为运算表达式设计优先级-分治的主要内容,如果未能解决你的问题,请参考以下文章