C++算法:给表达式添加运算符

news2024/12/24 9:35:23

题目

给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回 所有 能够得到 target 的表达式。
注意,返回表达式中的操作数 不应该 包含前导零。
示例 1:
输入: num = “123”, target = 6
输出: [“1+2+3”, “123”]
解释: “123” 和 “1+2+3” 的值都是6。
示例 2:
输入: num = “232”, target = 8
输出: [“23+2", "2+32”]
解释: “23+2” 和 “2+32” 的值都是8。
示例 3:
输入: num = “3456237490”, target = 9191
输出: []
解释: 表达式 “3456237490” 无法得到 9191 。

2023年5月版

class Solution {
public:
vector addOperators(string num, int target) {
std::unordered_map < string, std::tuple< long long, long long, long long >> preValueMulValue;
preValueMulValue.emplace(std::string(“”) + num[0], std::make_tuple(num[0] - ‘0’, num[0] - ‘0’, num[0] - ‘0’));
for (int i = 1; i < num.size(); i++)
{
const char& ch = num[i];
const int iBit = num[i] - ‘0’;
std::unordered_map < string, std::tuple< long long, long long, long long >> valueMulValue;
for (const auto& it1 : preValueMulValue)
{
const long long& iValue = std::get<0>(it1.second);
const long long& iMul = std::get<1>(it1.second);
const long long& iEnd = std::get<2>(it1.second);
const long long iMulPre = (0 == iEnd) ? 0 : iMul / iEnd;
//不加符号
if ((0 != iEnd) )
{
valueMulValue.emplace(it1.first + ch, std::make_tuple(iValue + iMulPre * (iEnd * 9 + iBit), iMulPre * (iEnd * 10 + iBit), iEnd * 10 + iBit));
}
//增加加号
valueMulValue.emplace(it1.first + ‘+’ + ch, std::make_tuple(iValue + iBit,iBit,iBit));
//增加减号
valueMulValue.emplace(it1.first + ‘-’ + ch, std::make_tuple(iValue - iBit, -iBit, iBit));
//增加乘号
valueMulValue.emplace(it1.first + '’ + ch, std::make_tuple(iValue + iMul(iBit - 1), iMul*iBit,iBit));
}
preValueMulValue.swap(valueMulValue);
}
vector vRet;
for (const auto& it1 : preValueMulValue)
{
if (target == std::get<0>( it1.second))
{
vRet.emplace_back(it1.first);
}
}
return vRet;
}

};

2023年8月

class Solution {
public:
vector addOperators(string num, int target) {
m_strNum = num;
m_iTarget = target;
const auto& iBit = num.front() - ‘0’;
dfs(num.substr(0, 1),1, iBit, iBit, iBit);
return m_vRet;
}
void dfs(string exp, int hasDo,const long long llValue, long long endMulValue,long long endValue)
{
if (hasDo == m_strNum.length())
{
if (llValue == m_iTarget)
{
m_vRet.emplace_back(exp);
}
return ;
}
const auto& chBit = m_strNum[hasDo] ;
const auto& iBit = chBit - ‘0’;
//1+23 llValue=7 endMulValue=6 endValue=3 exincludeEnd=1 preMul=2
long long exincludeEnd = llValue - endMulValue;
long long preMul = (0== endValue)? 0 : endMulValue / endValue;
#define NEW_END_MUL (preMul
llNewEnd)
//直接连接
//1+234 llValue=69 endMulValue=68 endValue=34 exincludeEnd=1 preMul=2
long long llNewEnd = endValue * 10 + ((endValue<0) ? -iBit : iBit);
if (0 != endValue )
{
dfs(exp + chBit, hasDo + 1, exincludeEnd + NEW_END_MUL, NEW_END_MUL, llNewEnd);
}
//乘以
llNewEnd = iBit;
preMul = endMulValue;
dfs(exp + '
'+ chBit, hasDo + 1, exincludeEnd + NEW_END_MUL, NEW_END_MUL, llNewEnd);
preMul = 1;
exincludeEnd = llValue;
dfs(exp + ‘+’ + chBit, hasDo + 1, exincludeEnd + NEW_END_MUL, NEW_END_MUL, llNewEnd);
llNewEnd = -iBit;
dfs(exp + ‘-’ + chBit, hasDo + 1, exincludeEnd + NEW_END_MUL, NEW_END_MUL, llNewEnd);
}
string m_strNum;
int m_iTarget;
vector m_vRet;
};

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快

速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《闻缺陷则喜算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

鄙人想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
墨家名称的来源:有所得以墨记

之。 |
|如果程序是一条龙,那算法就是他的是睛|

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

行情分析——加密货币市场大盘走势(10.18)

大饼昨日小幅度的下跌回调了&#xff0c;很快又上涨。目前看下来震荡向下刚刚开始&#xff0c;可以关注后续情况。大饼依然保持看空不做空&#xff0c;目前除了独立行情的币&#xff0c;就大饼非常强势。目前从MACD日线来看&#xff0c;还是保持多头趋势&#xff0c;预计明后两…

6-2 进制转换 分数 10

Status SPush(SqStack& s, ElemType x) {if (s.top s.stacksize) //栈满return ERROR;s.data[s.top] x;s.top;//1条或2条语句均可return OK; } Status SPop(SqStack& s, int& e) {if (s.top 0) //栈空return ERROR;s.top--; //S.top下移e s.data[s.top]; //把…

WhatsApp 私域营销指南

当涉及到WhatsApp私域营销时&#xff0c;企业正逐渐意识到这个强大工具的潜力&#xff0c;为建立与用户之间更紧密的关系、提供个性化的服务和推广&#xff0c;以及增加用户忠诚度&#xff0c; WhatsApp已成为一个不可或缺的营销渠道。在如今竞争激烈的市场中&#xff0c;私域营…

SSTI模板注入(flask) 学习总结

文章目录 Flask-jinja2 SSTI 一般利用姿势SSTI 中常用的魔术方法内建函数 利用 SSTI 读取文件Python 2Python 3 利用 SSTI 执行命令寻找内建函数 eval 执行命令寻找 os 模块执行命令寻找 popen 函数执行命令寻找 importlib 类执行命令寻找 linecache 函数执行命令寻找 subproce…

腾讯待办将全面停止运营?关停后有什么其他的好用待办软件推荐

微信是很多用户的手机上必下载的软件。在微信中&#xff0c;可以使用各种各样的功能&#xff0c;其中就包括小程序。在微信小程序中&#xff0c;有不少用户都在使用腾讯待办这款工具&#xff0c;它可以记录待办事项&#xff0c;打钩标记完成&#xff0c;还能通过公众号接收待办…

LeetCode26——删除有序数组中的重复项

LeetCode26——删除有序数组中的重复项 自己的暴力解&#xff08;假设可以使用额外的空间&#xff09;&#xff1a; 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(N) package keepcoding.leetcode.leetcode26; /*给你一个 非严格递增排列 的数组 nums &#xff0c;请…

MySql 数据库基础概念,基本简单操作及数据类型介绍

文章目录 数据库基础为什么需要数据库&#xff1f;创建数据库mysql架构SQL语句分类编码集修改数据库属性数据库备份 表的基本操作存在时更新&#xff0c;不存在时插入 数据类型日期类型enum和set 数据库基础 以特定的格式保存文件&#xff0c;叫做数据库&#xff0c;这是狭义上…

水浸监测新方法,简单实用,你值得拥有!

随着科技的不断进步&#xff0c;监控系统已成为我们生活中不可或缺的一部分。然而&#xff0c;许多监控系统在面临水浸等自然灾害时显得无能为力&#xff0c;这可能导致严重的损失和危险。 因此&#xff0c;水浸监控系统的需求不断增加&#xff0c;以保护我们的财产和安全。 客…

用户标签管理系统怎么设计?用户标签系统应用场景介绍

随着市场竞争日益激烈&#xff0c;企业对于流量的需求也越来越大。然而&#xff0c;“公域流量”的成本不断攀升&#xff0c;企业难以承担&#xff0c;且转化方式往往是“一次性生意”&#xff0c;无法沉淀为企业自己的数据&#xff0c;因此企业开始转向私域流量的培养。但私域…

满分漏洞!思科未修补的零日漏洞正被积极利用

该漏洞允许攻击者在未进行身份验证的情况下远程获得受影响设备的全部管理员权限。 思科要求客户立即在其所有面向互联网的 IOS XE 设备上禁用 HTTPS 服务器功能&#xff0c;以防止攻击者利用操作系统 Web 用户界面中的一个关键零日漏洞。 思科 IOS XE 是思科用于下一代企业网络…

通讯协议学习之路:UART协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序、…

国产单片机PY32F002B,32位ARM架构Cortex -M0+内核,性价比高

PY32F002B是普冉推出的新一代入门级32位MCU&#xff0c;内核使用 ARM Cortex M0&#xff0c;主频最高支持到24M&#xff0c;24K FLASH 3K SRAM存储&#xff0c;并支持1.7V~5.5V宽工作电压&#xff0c;-40 ~ 85 C工作温度。拥有1 x 12 位ADC、I2C、SPI、USART、TIM、LPTIM、IWDT…

三相交错LLC软启动控制驱动波形分析--死区时间与占空比关系

三相交错LLC软启动控制驱动波形分析 文章目录 三相交错LLC软启动控制驱动波形分析一、电路原理二、时序分析三、环路分析四、控制策略1.软启动驱动波形趋势2.软启动驱动波形占空图3.软启动驱动波形详细图4.软启动代码分析5.Debug调试界面5.死区时间与实际输出5.1 死区时间50--对…

UnrealEngine5 - Niagara粒子系统问题 当发射器不在视口内时,发射物不可见

最近在弄一点点Niagara粒子系统&#xff0c;发现一个小问题&#xff0c;就是当发射器不在视口内时&#xff08;被物体阻挡也是一样的&#xff09;发射的粒子不可见 解决办法跳转 如下 若往前移动到发射器不在视口内&#xff0c;则发射物不可见 或将其阻挡&#xff08;阻挡物没…

情绪化软文怎么写?媒介盒子分享五大步骤

在网络营销中&#xff0c;情绪化软文通常已经成为品牌营销的重要手段之一&#xff0c;它旨在通过在文案内容中融入情感和故事性的元素&#xff0c;为品牌塑造鲜明的形象&#xff0c;和用户建立情感联系&#xff0c;并促使他们购买产品&#xff0c;提升对品牌的忠诚度&#xff0…

游戏数据分析工具该怎样选择?有哪些选择标准?

选择游戏数据分析工具时&#xff0c;可以考虑以下标准&#xff1a; 1、功能全面性 确保工具提供全面的功能&#xff0c;包括玩家行为分析、性能监测、用户留存率、收入分析等&#xff0c;以满足不同层面的需求。 2、易用性 选择界面友好、易于使用的工具&#xff0c;以确保团…

ros2 UR10仿真包运行

前言 一个月前安装了一下这个包&#xff0c;但是有报错。现在换了一个强劲的电脑&#xff0c;内存64G &#xff0c;显存39G &#xff0c;终于跑起来了&#xff0c;没有报错。网页控制器可以控制RVIZ中的机器人旋转。 vituralBOX中3D加速要勾选&#xff0c;这样才能发挥独立显…

青龙面板安装及配置

一、青龙面板安装 二、初始化配置 首次登录需要进行初始化配置 1、开始安装 2、账号设置 3、通知设置 通知方式 - 钉钉机器人 获取钉钉机器人的token和secret参考如下文章&#xff1a; 获取钉钉机器人的token及secret-CSDN博客 4、完成 5、登录 三、应用 待续

基于SSM的在线教育网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

2023年四川省网络与信息安全技能大赛初赛 团队赛 Writeup

文章目录 Web简单的登录web-game-1-2ezphp2easyLDweb-include-1-1 Pwnjustread ReverseEzGoMediumRev Cryptoeasyhashcrypto-rsa-1-1crypto-classical-1-1 MiscNo.11 is gone2misc-zip-1-1misc-pic-1-1 Web 简单的登录 给了信息 账号为学号密码为电话&#xff0c;写脚本爆破 …