282. 给表达式添加运算符

给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有能够得到目标值的表达式。

示例 1:输入: num = "123", target = 6
输出: ["1+2+3", "1*2*3"] 示例 2:输入: num = "232", target = 8
输出: ["2*3+2", "2+3*2"]示例 3:输入: num = "105", target = 5
输出: ["1*0+5","10-5"]示例 4:输入: num = "00", target = 0
输出: ["0+0", "0-0", "0*0"]示例 5:输入: num = "3456237490", target = 9191
输出: []

解题思路

  1. 使用递归的方法,生成所有可能产生的表达式
  2. 利用基本计算器的代码,计算出所有表达式的值,找出满足题意的表达式

代码

class Solution {List<String> res=new ArrayList<>();int t;public List<String> addOperators(String num, int target) {t=target;int c=0;for (int i=0;i<num.length()-1;i++){c=(c*10)+num.charAt(i)-'0';operator(num,i+1,""+c);if (i==0&&num.charAt(i)=='0')break;}if(num.equals(""+target))res.add(num);return res;}    public long calculate(String s) {Stack<Long> stack=new Stack<>();Stack<Long> characterStack=new Stack<>();int n=s.length();int i = 0,sign=1,cur=0;while ( i < n) {char c = s.charAt(i);if(c==' '){i++;continue;}if(Character.isDigit(c)){long sum=0;while (i < n&&Character.isDigit(s.charAt(i))){sum*=10;sum+=s.charAt(i)-'0';i++;}stack.push(sum);i--;}else {if(c=='+'||c=='-'){if(!characterStack.isEmpty()){stack.push(stack.pop()*characterStack.pop()+stack.pop());}characterStack.push(c=='+'?1L:-1L);}else{int sum=0;i++;while (s.charAt(i)==' ') i++;while (i < n&&Character.isDigit(s.charAt(i))){sum*=10;sum+=s.charAt(i)-'0';i++;}if(c=='*')stack.push(stack.pop()*sum);elsestack.push(stack.pop()/sum);i--;}}i++;}return  stack.size()==1?stack.pop():stack.pop()*characterStack.pop()+stack.pop();}public void operator(String num, int s,String sb) {if (s==num.length()){if (calculate(sb)==t)res.add(sb);return;}int c=0;for (int i=s;i<num.length();i++){c=(c*10)+num.charAt(i)-'0';operator(num,i+1,sb+"+"+c);operator(num,i+1,sb+"-"+c);operator(num,i+1,sb+"*"+c);if (i==s&&num.charAt(i)=='0')break;}}
}

282. 给表达式添加运算符相关推荐

  1. leetcode 282. Expression Add Operators | 282. 给表达式添加运算符(中缀表达式求值)

    题目 https://leetcode.com/problems/expression-add-operators/description/ 题解 中缀表达式求值问题,参考:leetcode 227. ...

  2. python的表达式3or5_Python 简明教程 --- 5,Python 表达式与运算符

    靠代码行数来衡量开发进度,就像是凭重量来衡量飞机制造的进度. -- Bill Gates 目录 1,什么是表达式 表达式是代码的重要组成部分,一个表达式由运算符和操作数两部分组成. 一个表达式就描述了 ...

  3. python逻辑表达式3+45and_Python 简明教程 --- 5,Python 表达式与运算符

    靠代码行数来衡量开发进度,就像是凭重量来衡量飞机制造的进度. -- Bill Gates 目录 1,什么是表达式 表达式是代码的重要组成部分,一个表达式由运算符和操作数两部分组成. 一个表达式就描述了 ...

  4. java 运算符_详解Java表达式与运算符

    课程导言 [变量的赋值与计算都离不开表达式,表达式的运算依赖于变量.常量和运算符.本节课讨论Java的表达式的构成.常量的定义.运算符的分类及应用.通过本课的学习你将掌握运用表达式和运算符完成变量赋值 ...

  5. (15)Verilog表达式与运算符-基本语法(三)(第3天)

    (15)Verilog表达式与运算符-基本语法(三)(第3天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)Verilog表达式与运算符-基本语法(三)(第3天 ...

  6. java加法运算表达式_java运算符和表达式

    1. 算术运算符与算术表达式(1) 加减运算符 +,-.例如 2+39,908.98-23等. 加减运算符是双目运算符,即连接两个操作元的运算符.加减运算符的结合方向是从左到右.例如: 2+3-8,先 ...

  7. C# 表达式与运算符

    C# 表达式与运算符 1.表达式 表达式由运算符和操作符组成的,运算符设置将对操作数进行什么样的运算符,而操作数包括文本,常量,变量和表达式等. 1.算术运算符 +:加号. -:减号. *:乘号. / ...

  8. c语言笔记-----运算符和表达式(算术,自增自减,关系,赋值,逻辑运算符及其表达式,运算符和优先级总结)

    运算符 一.运算符和表达式的相关概念以及分类: **1.运算符的概念:**运算符就是一些特定的符号,用来表示针对数据的特定操作,也称之为操作符. 2.运算符的分类:分类方法不同,结果不同. **1)* ...

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

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

最新文章

  1. Centos6下安装中文字体
  2. 架构无小事:QQ碰微信 贴吧遇微博
  3. 牛逼!有人用漫画带你了解 Linux 内核长啥样
  4. construct2 ajax,Construct2/3
  5. 神奇的 SQL 之 ICP → 索引条件下推
  6. 年轻人创业可以选择的3个方向
  7. ACM-线段树区间更新+离散化
  8. flask创建虚拟环境
  9. 中国矫形修复植入物市场趋势报告、技术动态创新及市场预测
  10. 一段有趣的python小代码(将numpy中的数组转化为可哈希的字典)
  11. ubuntu串口调试工具RS485
  12. python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源)
  13. app 嵌套h5页面问题
  14. 如何理解第三方支付清算和结算?
  15. 寒假训练十(map,pair,string)2020.02.17(4题)
  16. unable to prepare for development xcode 13
  17. 优粮生活炒菜机器人_餐厅孵化器“优粮生活”,用孵化模式打造统一独立外卖品牌...
  18. 神舟凯旋,四海欢颜!“神舟十二号”背后的Smartbi力量
  19. RPC(Remote Procedure Call)远程过程调用
  20. 月薪10K码农,跳槽到40K架构师,技术学习路线图汇总

热门文章

  1. Catch That Cow——BFS
  2. 一次违反常规的Java大厂面试经历,系列教学
  3. 现在做Android开发有前途吗?复习指南
  4. 透彻解析!字节跳动Android实习面试凉凉经,年薪超过80万!
  5. Bginfo软件在域的部署和应用
  6. k8s的ingress使用
  7. Redis源码解析:21sentinel(二)定期发送消息、检测主观下线
  8. 利用find同时查找多种类型文件
  9. mssql性能优化[转](教你写出高质量的SQL语句)(二)
  10. Linux 禁止sendmail 自启动