Leetcode 282.给表达式添加运算符

给表达式添加运算符

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

示例 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

输出: []

题目分析:

此题一看就是要递归,不过递归会有很多边界条件要处理,也要注意递归的参数。

加法,减法直接在之前的基础上处理

不过乘法就麻烦一些了,需要修正之前的结果,减掉一个,再加上最新的乘积

还要注意不能出现000这种数

以及可能的越界

 1 import java.util.ArrayList;
 2 import java.util.List;
 3
 4 public class Solution {
 5     List<String> res;
 6     /**递归解决此问题*/
 7     public List<String> addOperators(String num, int target) {
 8         res=new ArrayList<String>();
 9         search(num,target,"",(long) 0,(long)0);
10         return res;
11     }
12
13     /***
14      * 递归的时候,要想好需要什么样的参数,什么时候返回
15      * @param num 初始集合
16      * @param target 目标值
17      * @param tmp    当前集
18      * @param cures  当前结果
19      * @param prenum 上一次的结果,主要是为了用于乘法计算,因为优先级最高
20      */
21     public void search(String num,int target, String tmp,Long cures,long prenum)
22     {
23         if(target==cures&&num.length()==0)
24         {
25
26             res.add(new String(tmp));
27             return ;
28
29         }
30         for(int i=1;i<=num.length();i++)
31         {
32             String cur=num.substring(0, i);
33             /**去除掉00X的结果,但是允许单个0*/
34             if(cur.length()>1&&cur.charAt(0)==‘0‘)
35                 return;
36             /**因为有可能越界,所以使用long*/
37             long curnum=Long.parseLong(cur);
38             String sub=num.substring(i);
39             /**第一个数的话不用添加符号*/
40             if(tmp.length()==0)
41             {
42                 search(sub,target,cur,curnum,curnum);
43             }
44             else
45             {
46                 /**加法*/
47                 search(sub,target,tmp+"+"+curnum,cures+curnum,curnum);
48                 /**减法,注意当前结果值是-curnum*/
49                 search(sub,target,tmp+"-"+curnum,cures-curnum,-curnum);
50                 /**乘法*/
51                 search(sub,target,tmp+"*"+curnum,(cures-prenum)+prenum*curnum,prenum*curnum);
52             }
53         }
54     }
55 }

原文地址:https://www.cnblogs.com/kexinxin/p/10204976.html

时间: 2024-08-30 07:41:12

Leetcode 282.给表达式添加运算符的相关文章

给表达式添加运算符

给定一个仅包含数字 0-9 的字符串和一个目标值,在数字之间添加二元运算符(不是一元)+.- 或 * ,返回所有能够得到目标值的表达式. 示例 1:输入: num = "123", target = 6输出: ["1+2+3", "123"] 示例 2:输入: num = "232", target = 8输出: ["23+2", "2+32"] 示例 3:输入: num = "

282 Expression Add Operators 给表达式添加运算符

给定一个仅包含0-9的字符串和一个目标值,返回在数字之间添加了二元运算符(不是一元的) +.-或*之后所有能得到目标值的情况.例如:"123", 6 -> ["1+2+3", "1*2*3"] "232", 8 -> ["2*3+2", "2+3*2"]"105", 5 -> ["1*0+5","10-5"]&

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q

PHP_零基础学php_2变量、预定义变量、预定义常量、表达式、运算符、程序控制流程

1.变量 PHP中使用$后跟变量名表示一个变量,变量名区分大小写. 变量的数据类型 整数类型 浮点类型 字符串类型 布尔类型 数组类型 对象 <html> <head> <title>php</title> </head> <body> /* 整数类型:可以在php中指定的整数包括十进制.八进制.和十六进制,整形数值前可以加上符号“+”或“-” */ $i=2468;//指定一个十进制整数 $i=-2468;//指定一个十进制负数 $

让我们来看一看C++ 三.表达式与运算符

所谓表达式,就是由数字.运算符号.约束变量等以能求得数值的有意义的排列方式形成的组合,我们平时说的算式,去掉得数和等号后就是一个表达式. 变量.数字什么的,看过第二章的读者应该都懂了,我这里要讲的是运算符号. 在我们日常生活中,运算符号不外乎+ - × ÷ 一类,在C++中,可以直接完成的运算有五种,分别是加法(+).减法(-).乘法(*).整除(/)和去余(%). 首先乘法并不是用×来表示的,这是因为,那个符号在我们使用的各式各样的键盘配位中,都是一个很难打出的符号,而*只需要左手左移,右手上

JavaScript&amp;jQuery.表达式与运算符

表达式与运算符 表达式 表达式可以求一个值,求值的过各可以包含运算. var length=80 表达式中可以使用两个或多个值,表达式最终返回一个值.如求桌子的面积. var area=80*60 操作符 表达中需要使用操作符,操作是对一个或多个值进行运算,得到一个值. 常用的操作符有:赋值操作符.比较操作符.算术操作符.逻辑操作符.字符串操作符. 算术操作符 算术操作符同数学学的差不多,在数值计算中用得非常多. 加法            +               将一个值和另一个值相加

Python表达式与运算符

表达式与运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 算术运算符 运算符 描述 + 加 - 两个对象相加 - 减 - 得到负数或是一个数减去另一个数 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 / 除 - x除以y % 取模 - 返回除法的余数 ** 幂 - 返回x的y次幂 // 取整除 - 返回商的整数部分 比较运算符 运算符 描述 == 等于 - 比较对象是否相等 != 不等

JavaScript学习----------表达式、运算符和优先级

表达式.运算符和优先级 '5' + 5 ---> 55 '5' - 5 --->  0 4 / 3 ---> 1.333333 4 / 0 ---> infinity 0 / 0 ---> NaN 4 % 0 ---> NaN 0 % 0 ---> NaN '25'<4 ---> false ------和第二个减号的挺像,把字符串给转成数字作比较. false == 0 ---> true true == 1 ---> true true

四、C#入门—表达式与运算符

四.C#表达式与运算符 4.1.表达式 操作数+运算符 4.2.数学运算符 var1=+var2 var1乘以1 var1=-var2 var1乘以-1 var++ 先用后加 ++var 先加后用 4.3.赋值运算符 略 4.4.关系运算符 结果只会是bool类型 1)对象的不同 数值类型比较两个数的大小 字符类比较Unicode编码大小,'A'=65 'a'=97 '0'=48 字符串只能用 == 或 != 4.5.逻辑运算符 结果只会是bool类型 &&与 ||或  !非 注:当表达式