leetcode|leetcode 241. Different Ways to Add Parentheses 为运算表达式设计优先级(中等)
一、题目大意
标签: 分治
https://leetcode.cn/problems/different-ways-to-add-parentheses
给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。
生成的测试用例满足其对应输出值符合 32 位整数范围,不同结果的数量不超过 104 。
示例 1:
输入:expression = "2-1-1"示例 2:
输出:[0,2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
输入:expression = "23-45"提示:
输出:[-34,-14,-10,-10,10]
解释:
(2(3-(45))) = -34
((23)-(45)) = -14
((2(3-4))5) = -10
(2((3-4)5)) = -10
(((23)-4)5) = 10
- 1 <= expression.length <= 20
- expression 由数字和算符 '+'、'-' 和 '*' 组成。
- 输入表达式中的所有整数值在范围 [0, 99]
三、解题方法 3.1 Java实现
public class Solution {
public List diffWaysToCompute(String expression) {
List ans = new ArrayList<>();
for (int i = 0;
i < expression.length();
i++) {
char ope = expression.charAt(i);
if (ope == '+' || ope == '-' || ope == '*') {
List left = diffWaysToCompute(expression.substring(0, i));
List right = diffWaysToCompute(expression.substring(i + 1));
for (int l : left) {
for (int r : right) {
switch (ope) {
case '+':
ans.add(l + r);
break;
case '-':
ans.add(l - r);
break;
case '*':
ans.add(l * r);
break;
}
}
}
}
}
if (ans.isEmpty()) {
ans.add(Integer.valueOf(expression));
}
return ans;
}
}
四、总结小记
- 2022/7/7 好事多磨,又要延期一周
推荐阅读
- 大厂面试高频题之数据结构与算法|LeetCode高频题(擂台赛n名战士战斗力最接近的两名战士,战斗力之差为多少)
- leetcode|leetcode 10. Regular Expression Matching 正则表达式匹配 (困难)
- leetcode|leetcode 72. Edit Distance 编辑距离(中等)
- LeetCode|每日一题 leetcode 825. 适龄的朋友 java题解
- Leetcode|Leetcode 825. 适龄的朋友 C++
- leetcode|leetcode栈和队列
- Linux|7.【刷爆LeetCode】把字符串转换成整数(多方法、多思路)
- leetcode|leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)
- leetcode|leetcode 322. Coin Change 零钱兑换(中等)
- 241. 为运算表达式设计优先级 : DFS 运用题