[抄题]:

给定一个仅包含数字 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"]
"00", 0 -> ["0+0", "0-0", "0*0"]
"3456237490", 9191 -> []

[暴力解法]:

时间分析:

空间分析:

[思维问题]:

  1. 不知道怎么插缝:单独命名一个变量pos记录位数信息。这个还是要加上的,以前没用过
  2. 感觉要用012控制+_*,想得太麻烦了,没必要增加变量,直接分情况写3个表达式就行了
  3. if (i != pos && num.charAt(pos) == '0') { break; } 02,0233431这些情况需要break。此题特殊

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

本来是加上lastf的,变成乘法了,把原来加的减去即可

分别用函数中的当前改变量、当前结果来表示,体现乘法时的特殊操作,改变量需要正负分明。改变量和结果不对应的时候,可以用两个变量来表示。

[一刷]:

  1. 字符串的corner case中,没有实例化对象是null,有对象但为空值是length() = 0,两种情况要分开,以前不理解。
  2. 当eval == target就符合题目的要求 可以退出了,没理解题目的目的。看清数据结构,不要瞎加对象。
  3. dfs中包括的dfs,利用其中的参数改变来进行recursion

[二刷]:

[三刷]:

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

[复杂度]:Time complexity: O(3^所有数字个数) Space complexity: O(3*所有数字个数)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

枚举型dfs, for循环出所有方法

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

224. Basic Calculator

150. Evaluate Reverse Polish Notation 用stack控制进出

241. Different Ways to Add Parentheses分治型(为啥不是枚举型?)DFS方法

494. Target Sum DP所有方法、DFS所有方法

[代码风格] :

public class Solution {
/*
* @param num: a string contains only digits 0-9
* @param target: An integer
* @return: return all possibilities
*/
public List<String> addOperators(String num, int target) {
//corner case
List<String> results = new ArrayList<>();
if (num.length() == 0 || num == null) {
return results;
}
dfs(num, "", results, target, 0, 0, 0);
return results;
}
//dfs
//corner case
private void dfs(String num, String path, List<String> results,
int target, int pos, long eval, long multed) {
//reach end
if (pos == num.length()) {
if (eval == target) {
results.add(path);
}
return;
}
//02,098
for (int i = pos; i < num.length(); i++) {
if (i != pos && num.charAt(pos) == '0') {
break;
}
long cur = Long.parseLong(num.substring(pos, i + 1));
if (pos == 0) {
dfs(num, path + cur, results, target, i + 1, cur, cur);
}else {
dfs(num, path + "+"+ cur, results, target, i + 1, eval + cur, cur);
dfs(num, path + "-"+ cur, results, target, i + 1, eval - cur, -cur);
dfs(num, path + "*"+ cur, results, target, i + 1, eval - multed + multed * cur, multed * cur);
}
}
}
}

282 expression and operations添加运算符的更多相关文章

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

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

  2. Java实现 LeetCode 282 给表达式添加运算符

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

  3. [leetcode]282. Expression Add Operators 表达式添加运算符

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...

  4. [Swift]LeetCode282. 给表达式添加运算符 | Expression Add Operators

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...

  5. leetcode 282. 给表达式添加运算符

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

  6. 282. Expression Add Operators

    题目: Given a string that contains only digits 0-9 and a target value, return all possibilities to add ...

  7. [LeetCode] 282. Expression Add Operators 表达式增加操作符

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...

  8. LeetCode 282. Expression Add Operators

    原题链接在这里:https://leetcode.com/problems/expression-add-operators/ 题目: Given a string that contains onl ...

  9. 【LeetCode】282. Expression Add Operators

    题目: Given a string that contains only digits 0-9 and a target value, return all possibilities to add ...

随机推荐

  1. Oozie_01安装教程【20161116】

    说明:hadoop用的是hadoop-2.5.0-cdh5.3.6 Oozie用的是oozie-4.0.0-cdh5.3.6 该测试环境用户名为hadoop  主机名为hadoop01 2.4安装部署 ...

  2. springboot项目中文件的下载(解决中文乱码问题)

    最近使用springboot项目,一直以来文件都以英文格式存储,这次使用的是xls文件下载,文件名为中文的,特此记录下中文文件名的下载以及springboot中下载路径报错问题. 正文 在使用spri ...

  3. jdbc-DAO的实现

    什么是 DAO DAO(Data Access Object)是一个数据访问接口,夹在业务逻辑与数据库资源中间. 在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有 ...

  4. ballerina 学习十九 安全编程

      ballerina 内部提供了几种常用的安全开发模型,token 认证(jwt) basic auth jwt 安全 参考代码 import ballerina/http; http:AuthPr ...

  5. IT项目管理的十六个字心得体会

    目标驱动,系统思维,风险意识,数据量化 凡事预则立,不预则废.如果你不知道要到哪里?给你一张地图也没有用.目标驱动首先要有最基本的计划管理和时间管理能力.对于一个项目,我们过程中做的所有工作都是为了要 ...

  6. LoadRunner安装+破解+汉化

    安装 一.需要准备的东东: 1.电脑的操作系统:Win7旗舰版(不解释,这个版本安装问题最少了) 2.LoadRunner11+破解文件+汉化文件+删除注册表工具 3.强大的搜索引擎 二.安装过程 用 ...

  7. (原创)AP6212移植到AM335X自主开发板上

    转载请指明出处. 参考<关于AM335X移植SDIO WIFI的简易教程> http://www.deyisupport.com/question_answer/dsp_arm/sitar ...

  8. zedgraph中禁用鼠标滚轮变焦(禁止画图区域随鼠标滚动改变XY轴,定位)(转)

    禁用鼠标滚轮变焦的zedgraph功能 如果zgc是你ZedGraphControl实例,请使用: zgc.ZoomButtons = MouseButtons.None; zgc.ZoomButto ...

  9. [DP题]登山

    描述 五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号.同时队员们还有另一个登山习惯,就是 ...

  10. [持续更新]一些zyys的题的集合

    Luogu P1119 灾后重建 Sol:对于每个中转点K,需且仅需以此松弛一次 Key words:Floyd,本质活用 考题 路径数 题目描述: Euphemia到一个N*N的药草田里采药,她从左 ...