Different Ways to Add Parentheses

原题链接Different Ways to Add Parentheses

给出一个只有加,减,乘运算的表达式,要求在这个表达式中添加合理的括号,返回所有填上括号后的计算结果

考虑每一个操作符(+, -, *),每一个操作符实际上是将表达式分成了左右两部分。

以2−1−12-1-1为例,第一个”-“将表达式分成了两部分,分别是22和1−11-1,那么就可以假定添加括号的结果是(2)−(1−1)(2)-(1-1)

同样的对左右两边进行处理

(2)(2)不能再拆分,直接返回

(1−1)(1-1)中仍然有一个操作符,又分成左右两部分,分别是11和11,那么就可以嘉定添加括号的结果是(1)−(1)(1)-(1)

继续对左右两边进行处理,都不能继续拆分,直接返回

可以发现,到最后面,整个表达式都被拆分成一个个数,然后逐层向上返回,根据操作符的不同进行将左右两边返回的结果进行不同的运算,继续向上返回

代码如下

class Solution {
public:vector<int> diffWaysToCompute(string input) {vector<int> res;for(int i = 0; i < input.size(); ++i){//如果是操作符,就将左右两边分开if(isOperator(input[i])){//返回左边和右边的所有可能结果vector<int> lhs = diffWaysToCompute(input.substr(0, i));vector<int> rhs = diffWaysToCompute(input.substr(i + 1));//依次组合,因为返回之前考虑了为空的情况,所以这里无需判断是否为空for(auto n1 : lhs){for(auto n2 : rhs){if(input[i] == '+') res.emplace_back(n1 + n2);else if(input[i] == '-')    res.emplace_back(n1 - n2);else    res.emplace_back(n1 * n2);}}}}if(res.empty()){//可以添加一条语句判断input是空字符的情况//if(input.empty()) input.append(1, '0');int n = 0;sscanf(input.c_str(), "%d", &n);res.emplace_back(n);}return res;}
private:bool isOperator(char op){return op == '+' || op == '-' || op == '*';}
};

本题主要还是递归,将大问题转换为左右两个小问题,进而求解

以前还遇到过只需要将所有加括号的情况返回的,忘记在哪了:cry:

每天一道LeetCode-----对表达式添加括号并求值,返回所有可能的计算结果相关推荐

  1. leet_241_different_way_add_parenthese(给表达式加括号并求值)

    leet:地址 分类:分治法(+递归) 题目描述: 给定一串由数字和操作符构成的字符串,通过对其加所有可能形式的括号,求出该字符串所有可能的取值.有效的操作符为+.-.x. 输入输出样例(注意此样例顺 ...

  2. LeetCode 6038. 向表达式添加括号后的最小结果

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的字符串 expression ,格式为 "<num1>+<num2>" ,其中 &l ...

  3. C语言为运算表达式添加括号,读书笔记-c语言-运算符与表达式

    1.算术运算符:+-*/% %要求参与运算的两个量必须是整型或字符型的,实型(float,double等)的数据不能做%运算. 算术表达式 运算符和数据可以组成运算的式子,称为表达式.举例:10+20 ...

  4. Java 计算数学表达式(字符串解析求值工具)

    Java字符串转换成算术表达式计算并输出结果,通过这个工具可以直接对字符串形式的算术表达式进行运算,并且使用非常简单. 这个工具中包含两个类 Calculator 和 ArithHelper Calc ...

  5. leetcode 399. Evaluate Division | 399. 除法求值(图的邻接表,DFS)

    题目 https://leetcode.com/problems/evaluate-division/ 题解 题目看着复杂,实际上是图的 DFS. 例如,已知 a/b, b/c, c/d,想求 a/d ...

  6. 数据结构栈之中缀表达式求值(实现计算器综合计算)

    一.思路分析: 1.通过一个index值(索引),来遍历我们的表达式. 2.如果我们发现是一个数字,就直接入数栈. 3.如果发现扫描到是一个符号,就分如下情况: (1).如果发现当前的符号栈为空,就直 ...

  7. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  8. 字符串算术表达式求值-简单计算器实现(栈)-数据结构和算法(Java)

    1 字符串算术表达式分类 字符串算术表达式分为前缀表达式.中缀表达式和后缀表达式.其中前缀表达式又称波兰表达式,后缀表达式基于前缀表达式,又称逆波兰表达式.下面给出百度百科关于几种表达式的定义: 前缀 ...

  9. C/C++ 语言中表达式的求值

    作者:裘宗燕    北京大学数学学院信息科学系    本文基本内容发表于<编程高手>杂志 2004 年第 12 期 经常可以在一些讨论组里看到下面的提问:"谁知道下面 C 语句给 ...

最新文章

  1. 使用 NumPy 的标准化技巧
  2. android movie studio 下载,Movie Studio+ Video Editor
  3. python安装库 换源操作
  4. VTK:图片之ResizeImageDemo
  5. 分享网页加载速度优化的一些技巧?
  6. 重新审视自己和自己的目标
  7. day02 pycharm 安装
  8. php 点击下拉显示内容,php+ajax实现仿百度查询下拉内容功能示例
  9. C语言简明数据类型指南
  10. JWPlayer Uncaught Error: Invalid SRT file
  11. mysql批量导入csv数据_csv批量导入mysql命令
  12. ips细胞最新进展:利用iPS细胞成功培养出抑制宫颈癌繁殖的免疫杀伤T细胞,有望实现宫颈癌的免疫细胞疗法
  13. gdata_YouTube GData API和Android
  14. ACM 比赛 训练记录(持续更新)
  15. 微信公众号开发系统入门教程之公众号与小程序、APP的区别
  16. delphi cef写入html,Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理...
  17. PHP - 表单(FORM)实例
  18. Zemax操作--8(激光扫描系统)
  19. 被冰封的 Bug:Fishhook Crash 修复纪实
  20. 大学物理 复习指导、公式推导精简过程、结论归纳(物理学教程 第三版 上册 马文蔚 周雨青)

热门文章

  1. 剑指offerpython_《剑指offer》3. 从尾到头打印单链表值【Java+Python】
  2. Java黑皮书课后题第5章:*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生
  3. MongoDB 索引-9
  4. 【深度学习系列】迁移学习Transfer Learning
  5. java RSA加密解密实现(含分段加密)
  6. 1. Spring boot 之热部署
  7. 修改 wordpress 后台管理员登录地址
  8. 本机连接虚拟机Oracle时报错的解决办法
  9. 【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...
  10. poj 2187 Beauty Contest (凸包: 最远点对,最长直径 , 旋转卡壳法)