题目

https://leetcode.com/problems/different-ways-to-add-parentheses/

题解

参考:C++ Solution [Faster than 100%] | Explained with diagrams

  • The problem becomes easier when we think about these expressions as expression trees.
  • We can traverse over the experssion and whenever we encounter an operator, we recursively divide the expression into left and right part and evaluate them seperately until we reach a situation where our expression is purely a number and in this case we can simply return that number.
  • Since there can be multiple ways to evaluate an expression (depending on which operator you take first) we will get a list of reults from left and the right part.
  • Now that we have all the possible results from the left and the right part, we can use them to find out all the possible results for the current operator.
import java.util.ArrayList;
import java.util.List;class Solution {public boolean isOp(char c) {return c == '+' || c == '-' || c == '*' || c == '/';}public int cal(int a, char op, int b) {return switch (op) {case '+' -> a + b;case '-' -> a - b;case '*' -> a * b;default -> a / b;};}public List<Integer> diffWaysToCompute(String expression) {char[] exp = expression.toCharArray();List<Integer> list = new ArrayList<>();boolean numberOnly = true;for (int i = 0; i < exp.length; i++) {List<Integer> left = new ArrayList<>();List<Integer> right = new ArrayList<>();if (isOp(exp[i])) {numberOnly = false;left = diffWaysToCompute(expression.substring(0, i));right = diffWaysToCompute(expression.substring(i + 1, exp.length));}for (int j : left) {for (int k : right) {list.add(cal(j, exp[i], k));}}}if (numberOnly) list.add(Integer.valueOf(expression));return list;}
}

leetcode 241. Different Ways to Add Parentheses | 241. 为运算表达式设计优先级(Java)相关推荐

  1. 241. Different Ways to Add Parentheses

    241. Different Ways to Add Parentheses https://leetcode.com/problems/different-ways-to-add-parenthes ...

  2. 力扣- -241.为运算表达式设计优先级

    力扣- -241.为运算表达式设计优先级(分治算法) 文章目录 力扣- -241.为运算表达式设计优先级(分治算法) 一.题目描述 二.分析 三.代码 四.优化 一.题目描述 二.分析 看到这道题的第 ...

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

    241. 为运算表达式设计优先级 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 +, - 以及 * . 示例 ...

  4. 【LeetCode】241. Different Ways to Add Parentheses

    题目: Given a string of numbers and operators, return all possible results from computing all the diff ...

  5. LeedCode 241. Different Ways to Add Parentheses

    一.题目 Given a string expression of numbers and operators, return all possible results from computing ...

  6. LeetCode 241. 为运算表达式设计优先级(动态规划)

    1. 解题 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果. 你需要给出所有可能的组合的结果.有效的运算符号包含 +, - 以及 * . 示例 1: 输入: &q ...

  7. [leetcode]241. 为运算表达式设计优先级

    1.提交的代码,分治 class Solution {map< pair<int,int>, vector<int> >hash; // 备忘录 key: < ...

  8. LeetCode-241. Different Ways to Add Parentheses [C++][Java]

    LeetCode-241. Different Ways to Add Parentheseshttps://leetcode.com/problems/different-ways-to-add-p ...

  9. [LeetCode]241.Different Ways to Add Parenthese

    description Given a string of numbers and operators, return all possible results from computing all ...

最新文章

  1. java atomicinteger_Java多线程进阶(十三)—— J.U.C之atomic框架:AtomicInteger
  2. Java开源诊断工具 Arthas 发布v3.1.0
  3. cstring判断包含字符串_Python字符串方法之-解决判断问题
  4. mysql 调用未定义函数_php – Wierd和Annoying错误:调用未定义的函数mysql_query()[复制]...
  5. 启动一个Java进程
  6. 总结python中基本的面试题
  7. 入门 | 关于神经网络:你需要知道这些
  8. 50道编程小题目之【完数】
  9. T-SQL(SQL Sever) 简单语句实例
  10. 良好的XHTML编写习惯
  11. 解决办法:GTK+ 2.x symbols detected
  12. PAIP.paip.手机离线ROOT过程总结
  13. OpenCV入门教程,超详细OpenCV入门教程!10小时让你轻松掌握opencv的使用
  14. 数字图像处理 离散余弦变换(DCT)和峰值信噪比(PSNR)
  15. three.js加载OBJ格式模型(vue中使用three.js51)
  16. MS08067 知识星球 “网络安全应急响应训练班”,限时免费加入~
  17. Mac安装Etcd,配置Etcd可视化页面Etcd Browser
  18. 校长办公室管理系统c语言,【锦城故事】学软硬结合理论做智慧超群系统是锦城电子的必经之路...
  19. Worthington核心酶——木瓜蛋白酶的特征及相关应用
  20. 我的所有的浏览器被hao123 挟持了,终极解决方案

热门文章

  1. HDU - 4738 Caocao's Bridges(边双缩点)
  2. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)
  3. Gym - 101775J Straight Master(差分数组)
  4. POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)
  5. python 控制qq_最必要的最小建议集:写给刚入门编程(python)的同学
  6. php中如何固定表格宽度,实例讲解DataTables固定表格宽度(设置横向滚动条)
  7. HDU4741(异面直线间的距离--空间解析几何)
  8. HDU4405(概率DP求期望)
  9. 5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
  10. 外挂学习之路(3)--- 内存遍历工具