1. Expression Add Operators

Given a string that contains only digits 0-9 and a target value, return all possibilities to add binary operators (not unary) +, -, or * between the digits so they evaluate to the target value.

Example
Example 1:

Input:
“123”
6
Output:
[“123”,“1+2+3”]
Example 2:

Input:
“232”
8
Output:
[“23+2", "2+32”]
Example 3:

Input:
“105”
5
Output:
[“1*0+5”,“10-5”]
Example 4:

Input:
“00”
0
Output:
[“0+0”, “0-0”, “0*0”]
Example 5:

Input:
“3456237490”,
9191
Output:
[]

解法1:用DFS。
注意:
1)因为乘法优先级高,所以我们记下prevFactor,如果选择乘法,则将前面的prevFactor减去,再加上prevFactor与现在的number的乘积。
2) 用long long因为可能溢出。
3) 当输入为“00",同时target也为0时,输出可能是"00",应该将该可能性排除。

class Solution {public:/*** @param num: a string contains only digits 0-9* @param target: An integer* @return: return all possibilities*/vector<string> addOperators(string &num, int target) {int n = num.size();if (n == 0) return vector<string>();string sol;dfs(num, 0, sol, 0, 0, target);return sols;}private:vector<string> sols;void dfs(string &num, int index, string sol, long long sum, long long prevFactor, int target) {int n = num.size();if (index == n && target == sum) {sols.push_back(sol);return;}for (int i = index; i < n; ++i) {string numStr = num.substr(index, i - index + 1);long long number = stoll(numStr);if (index == 0) {dfs(num, i + 1, numStr, number, number, target);} else {dfs(num, i + 1, sol + '+' + numStr, sum + number, number, target);dfs(num, i + 1, sol + '-' + numStr, sum - number, -number, target);dfs(num, i + 1, sol + '*' + numStr, sum - prevFactor + prevFactor * number, prevFactor * number, target);}if (num[index] == '0') break;  //to avoid "00"}}
};

LintCode 653: Expression Add Operators相关推荐

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

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

  2. 282. Expression Add Operators

    目录 题目理解 分析 第一步:dfs获得所有表达式 第二步:计算结果 先计算加减法 计算乘法 时间复杂度 进一步优化 题目理解 输入:一个字符串num,一个int target.输入num只包含数字. ...

  3. 寒假LeetCode打卡

    文章目录 @[toc] 链表专题 LeetCode 19. Remove Nth Node From End of List LeetCode 83. Remove Duplicates from S ...

  4. LeetCode All in One 题目讲解汇总(持续更新中...)

    原文地址:https://www.cnblogs.com/grandyang/p/4606334.html 终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开 ...

  5. Leetcode重点250题

    LeetCode重点250题 这个重点题目是把LeetCode前400题进行精简.精简方法如下: 删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于 ...

  6. LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本

    1. Array (1) 27. Remove Element(Easy) 给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 思路: 不需要使用排序,如果等于该值,则将n-1的值 ...

  7. Leet 题目整理归类 - 快速通道 (持续更新)

    刷Leet 5个月了,先总结一下,这里算是每题的快速通道.自己做个记录便于以后重温算法.如果能帮到别人就更好了. 本人是算法新手,如果对于一些题目读者有更好的实现方法,如能不吝赐教,万分感谢. [DF ...

  8. LinkedIn TAG

    1 [leetcode]243. Shortest Word Distance最短单词距离 Two Pointers 2 [leetcode]244. Shortest Word Distance I ...

  9. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

最新文章

  1. 自动化测试工具的选择
  2. 【转】正则表达式简介及在C++11中的简单使用教程
  3. codevs2574 波兰表达式
  4. flink实时机器学习-alink在线机器学习remote模式贝叶斯建模实验记录
  5. python文件目录操作方法_Python常用的文件及文件路径、目录操作方法汇总介绍
  6. 热血致敬!曾影响几代科学巨匠的传奇经典,至今仍无人能超越!
  7. Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
  8. djpython教程_简单介绍Python的Django框架的dj-scaffold项目
  9. 掌握这些方法,后台设计变得简单起来
  10. (转)淘淘商城系列——使用JsonView来格式化json字符串
  11. 刘宇凡:微博的那些人,那些事
  12. 下载量超1600万的热门开源 JavaScript 序列化包中被曝 RCE 漏洞
  13. mysql 针对table的查看命令行
  14. JDK1.8中文帮助文档下载
  15. Java中new一个对象的步骤:
  16. html第三章练习1:音乐排行榜
  17. OLED电视与量子点电视,谁更值得买?
  18. bd-rate的计算
  19. git/github入门
  20. 二极管关键参数及选型指导

热门文章

  1. 联想平板android版本升级,联想乐Pad A1平板安卓4.0升级操作详细教程
  2. rj45管脚定义_“RJ45接口”定义标准是什么?
  3. 招募,IT 技术界的伯乐和千里马
  4. 定制office2007静默安装
  5. jzoj6384. 【NOIP2019模拟2019.10.23】珂学家
  6. MATLAB去除矩阵中的NAN值
  7. 干了12年硬件,转芯片原厂FAE,一如既往的打杂背锅
  8. php 精品课程,基于PHP的精品课程教学网站
  9. 蓝牙室内定位UWB常见场景定位分析
  10. 10个最好的无器械训练项目