博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
给表达式添加运算符
阅读量:6465 次
发布时间:2019-06-23

本文共 2070 字,大约阅读时间需要 6 分钟。

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

示例 1:

输入: num = "123", target = 6
输出: ["1+2+3", "123"]

示例 2:

输入: num = "232", target = 8
输出: ["23+2", "2+32"]

示例 3:

输入: num = "105", target = 5
输出: ["1*0+5","10-5"]

示例 4:

输入: num = "00", target = 0
输出: ["0+0", "0-0", "0*0"]

class Solution {public:    vector
addOperators(string num, int target) { vector
result; addOperatorsDFS(num, target, 0, 0, "", result); return result; } //lastOperaNum上一次添加的操作数(用于*法回退) void addOperatorsDFS(string num, int target, long long lastOperaNum, long long curNum, string tempRes, vector
&result) { if (num.size() == 0 && curNum == target) {//此次运算符添加成功 result.push_back(tempRes); return; } //对添加运算符的位置穷举 for (int i = 1; i <= num.size(); ++i) { string cur = num.substr(0, i); if (cur.size() > 1 && cur[0] == '0') {//剪枝 cur不能出现“012”这种,即不能出现前导零 return; } string next = num.substr(i);//cur之后的字符串 if (tempRes.size() > 0) {//如果cur不是第一个操作数 //尝试添加加,这次添加的操作数lastOperaNum == stoll(cur) addOperatorsDFS(next, target, stoll(cur), curNum + stoll(cur), tempRes + "+" + cur, result); //尝试添加减,这次添加的操作数lastOperaNum == -stoll(cur) addOperatorsDFS(next, target, -stoll(cur), curNum - stoll(cur), tempRes + "-" + cur, result); //尝试添加乘 //由于乘法的优先级比加、减法高,所以需要回退到上一步,即把上一步的操作数与乘法进行运算 //这次添加的操作数lastOperaNum == lastOperaNum * stoll(cur) //(curNum - lastOperaNum)是退回上一次的操作数,然后在进行乘法运算 + lastOperaNum * stoll(cur) addOperatorsDFS(next, target, lastOperaNum * stoll(cur), (curNum - lastOperaNum) + lastOperaNum * stoll(cur), tempRes + "*" + cur, result); } else {//如果是第一个操作数 addOperatorsDFS(next, target, stoll(cur), stoll(cur), cur, result); } } }};

转载于:https://blog.51cto.com/14127742/2394650

你可能感兴趣的文章
struct和typedef struct
查看>>
RPC框架Thrift例子-PHP调用C++后端程序
查看>>
cell reuse & disposebag
查看>>
【故障处理】ORA-12545: Connect failed because target host or object does not exist
查看>>
云时代,程序员将面临的分化
查看>>
Go的基本示例
查看>>
redis订阅发布
查看>>
js判断移动端是否安装某款app的多种方法
查看>>
怎样上传网页到ftp中
查看>>
C语言 · 8皇后问题
查看>>
学习angularjs的内置API函数
查看>>
知情意的客观本质
查看>>
【JavaScript】正則表達式
查看>>
禁用android studio自身的ndk编译disable automatic ndk-build call
查看>>
js实现动态添加事件
查看>>
amazeui学习笔记--css(布局相关3)--辅助类Utility
查看>>
SQL Server系统表介绍与使用
查看>>
Java中的多线程你只要看这一篇就够了
查看>>
Block Functionality
查看>>
教你如何利用php.exe运行php文件
查看>>