LintCode 653: Expression Add Operators
- 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相关推荐
- leetcode 282. Expression Add Operators | 282. 给表达式添加运算符(中缀表达式求值)
题目 https://leetcode.com/problems/expression-add-operators/description/ 题解 中缀表达式求值问题,参考:leetcode 227. ...
- 282. Expression Add Operators
目录 题目理解 分析 第一步:dfs获得所有表达式 第二步:计算结果 先计算加减法 计算乘法 时间复杂度 进一步优化 题目理解 输入:一个字符串num,一个int target.输入num只包含数字. ...
- 寒假LeetCode打卡
文章目录 @[toc] 链表专题 LeetCode 19. Remove Nth Node From End of List LeetCode 83. Remove Duplicates from S ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
原文地址:https://www.cnblogs.com/grandyang/p/4606334.html 终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开 ...
- Leetcode重点250题
LeetCode重点250题 这个重点题目是把LeetCode前400题进行精简.精简方法如下: 删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于 ...
- LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本
1. Array (1) 27. Remove Element(Easy) 给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 思路: 不需要使用排序,如果等于该值,则将n-1的值 ...
- Leet 题目整理归类 - 快速通道 (持续更新)
刷Leet 5个月了,先总结一下,这里算是每题的快速通道.自己做个记录便于以后重温算法.如果能帮到别人就更好了. 本人是算法新手,如果对于一些题目读者有更好的实现方法,如能不吝赐教,万分感谢. [DF ...
- LinkedIn TAG
1 [leetcode]243. Shortest Word Distance最短单词距离 Two Pointers 2 [leetcode]244. Shortest Word Distance I ...
- taoqick 搜索自己CSDN博客
L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...
最新文章
- 自动化测试工具的选择
- 【转】正则表达式简介及在C++11中的简单使用教程
- codevs2574 波兰表达式
- flink实时机器学习-alink在线机器学习remote模式贝叶斯建模实验记录
- python文件目录操作方法_Python常用的文件及文件路径、目录操作方法汇总介绍
- 热血致敬!曾影响几代科学巨匠的传奇经典,至今仍无人能超越!
- Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
- djpython教程_简单介绍Python的Django框架的dj-scaffold项目
- 掌握这些方法,后台设计变得简单起来
- (转)淘淘商城系列——使用JsonView来格式化json字符串
- 刘宇凡:微博的那些人,那些事
- 下载量超1600万的热门开源 JavaScript 序列化包中被曝 RCE 漏洞
- mysql 针对table的查看命令行
- JDK1.8中文帮助文档下载
- Java中new一个对象的步骤:
- html第三章练习1:音乐排行榜
- OLED电视与量子点电视,谁更值得买?
- bd-rate的计算
- git/github入门
- 二极管关键参数及选型指导
热门文章
- 联想平板android版本升级,联想乐Pad A1平板安卓4.0升级操作详细教程
- rj45管脚定义_“RJ45接口”定义标准是什么?
- 招募,IT 技术界的伯乐和千里马
- 定制office2007静默安装
- jzoj6384. 【NOIP2019模拟2019.10.23】珂学家
- MATLAB去除矩阵中的NAN值
- 干了12年硬件,转芯片原厂FAE,一如既往的打杂背锅
- php 精品课程,基于PHP的精品课程教学网站
- 蓝牙室内定位UWB常见场景定位分析
- 10个最好的无器械训练项目