当前位置: 首页 > news >正文

面试题目:(4)给表达式添加运算符

目录

题目

代码

思路解析

例子


题目

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

代码

#include <stdlib.h>
#include <string.h>
#include <stdio.h>void evaluate(int* num_list, int* num_flag, int n, int target) {int end = num_list[0]; for (int i = 1; i < n; i++) {if (num_flag[i] == 1) {end *= num_list[i];} else if (num_flag[i] == 2) {end += num_list[i];} else if (num_flag[i] == 3) {end -= num_list[i];}}if (end == target) {printf("找到表达式: ");for (int i = 0; i < n; i++) {if (i > 0) {if (num_flag[i] == 1) printf("*");if (num_flag[i] == 2) printf("+");if (num_flag[i] == 3) printf("-");}printf("%d", num_list[i]);}printf(" = %d\n", target);}
}void backtrack(int* num_list, int* num_flag, int n, int target, int pos) {if (pos == n) {evaluate(num_list, num_flag, n, target);return;}for (int i = 1; i <= 3; i++) { // 遍历三种运算符num_flag[pos] = i;backtrack(num_list, num_flag, n, target, pos + 1);// 递归下一个运算符}
}int main() {char num[256] = "";int target;printf("num = ");fgets(num, sizeof(num), stdin);if (strlen(num) > 10) return 0;int n = strlen(num) - 1;int num_list[n];for (int i = 0; i < n; i++) {if (num[i] >= '0' && num[i] <= '9') {num_list[i] = num[i] - '0';} else {return 0;}}printf("target = ");scanf("%d", &target);if (target > 230 || target < -231) return 0;int num_flag[n]; // 保存操作符的数组backtrack(num_list, num_flag, n, target, 1);return 0;
}

思路解析

  • 接收输入的字符串和目标数字
  • 判断其是否输入正确
  • 将字符串数字转为整数数组
  • 调用递归backtrack函数,从第一位开始递归
    • 判断递归索引是否是到最后一位
      • 是的话调用验算函数
        • 递归标志位数组进行判断加减算出答案
        • 判断答案于目标数字是否一样,一样就打印
    • 不是的话就继续就进行对标志位数组进行初始化
      • 一个数字一个标志位,如果是1就表示乘法,2为加法,3为减法
      • 递归索引+1进行递归

简单来说就是先从第一个字符开始变化标志位,从1到2到3,也就从乘法加法减法,但在第一个执行乘法前,后面的要先完成从1到2到3的变化,所以就是在第一个执行1的时候要等第二个数字从1到2到3变化完才进行变2,然后又要等第二个数字从1到2到3才变3,如果有第三个数字的话第二个数字也要等第三个数字变化完,一层一层递归,直到递归到最后一个数字后,才开始进行计算

例子

输入 1234   目标 10

相关文章:

面试题目:(4)给表达式添加运算符

目录 题目 代码 思路解析 例子 题目 题目 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target &#xff0c;在 num 的数字之间添加 二元 运算符&#xff08;不是一元&#xff09;、- 或 * &#xff0c;返回 所有能够得到 target 的表达式。1 < num.length &…...

[C#]将opencvsharp的Mat对象转成onnxruntime的inputtensor的3种方法

第一种方法&#xff1a;在创建tensor时候直接赋值改变每个tensor的值&#xff0c;以下是伪代码&#xff1a; var image new Mat(image_path);inpWidth image.Width;inpHeight image.Height;//将图片转为RGB通道Mat image_rgb new Mat();Cv2.CvtColor(image, image_rgb, Col…...

CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…...

数据链路层 I(组帧、差错控制)【★★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 为了把主要精力放在点对点信道的数据链路层协议上&#xff0c;可以采用下图&#xff08;a&#xff09;所示的三层模型。在这种三层模型中&#xff0c;不管在哪一段…...

悟空降世 撼动全球

文&#xff5c;琥珀食酒社 作者 | 积溪 一只猴子能值多少钱&#xff1f; 答案是&#xff1a;13个小目标 这两天 只要你家没有断网 一定会被这只猴子刷屏 它就是咱国产的3A游戏 《黑神话&#xff1a;悟空》 这只猴子到底有多火&#xff1f; 这么跟你说吧 茅台见了它都…...

Swoole 和 Java 哪个更有优势呢

Swoole 和 Java 各有优势&#xff0c;在性能上不能简单地说哪一个更好&#xff0c;需要根据具体的应用场景来分析。 Swoole 优势&#xff1a;高并发&#xff1a;Swoole 是一个基于 PHP 的异步、协程框架&#xff0c;专为高并发场景设计&#xff0c;适用于 I/O 密集型应用&…...

Salesforce 发布开源大模型 xGen-MM

xGen-MM 论文 在当今 AI 技术飞速发展的时代&#xff0c;一个新的多模态 AI 模型悄然崛起&#xff0c;引起了业界的广泛关注。这个由 Salesforce 推出的开源模型—— xGen-MM&#xff0c;正以其惊人的全能特性和独特优势&#xff0c;在 AI 领域掀起一阵旋风。那么&#xff0c;x…...

冒 泡 排 序

今天咱们单独拎出一小节来聊一聊冒泡排序昂 冒泡排序的核心思想就是&#xff1a;两两相邻的元素进行比较&#xff08;理解思路诸君可看下图&#xff09; 接下来我们上代码演示&#xff1a; 以上就是我们初步完成的冒泡排序&#xff0c;大家不难发现&#xff0c;不管数组中的元…...

采用先进的人工智能视觉分析技术,能够精确识别和分析,提供科学、精准的数据支持的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…...

IAA游戏APP如何让合理地让用户观看更多广告,提高广告渗透率

广告变现已经成为休闲游戏开发者重要的收益方式之一&#xff0c;超50%国内休闲游戏已经采用广告变现的方式&#xff0c;游戏广告预算是游戏行业开发者广告变现的主要预算来源。 #深度好文计划#如何合理地提高广告渗透率&#xff1f; 广告渗透率能直接反映游戏中有广告行为用户…...

环网交换机的特殊作用是什么?

环网交换机作为现代网络建设的重要组成部分&#xff0c;具有独特而特殊的作用。在信息技术迅猛发展的今天&#xff0c;各类数据传输和网络连接需求日益增加&#xff0c;环网交换机的出现为解决这些问题提供了理想的方案。环网交换机通常将多个网络节点通过环形结构连接起来&…...

mac电脑安装Zsh并启用

安装 Zsh 1. 安装 Zsh 新版mac系统会默认安装并使用zsh&#xff0c;如没用&#xff0c;需在终端中安装&#xff1a; brew install zsh2. 安装 Oh My Zsh 克隆Oh My Zsh到你的目录&#xff1a; git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh3. 复…...

【后续更新】python搜集上海二手房数据

源码如下: import asyncio import aiohttp from lxml import etree import logging import datetime import openpyxlwb = openpyxl.Workbook() sheet = wb.active sheet.append([房源, 房子信息, 所在区域, 单价, 关注人数和发布时间, 标签]) logging.basicConfig(level=log…...

创建GPTs,打造你的专属AI聊天机器人

在2023年11月的「OpenAI Devday」大会上&#xff0c;OpenAI再度带来了一系列令人瞩目的新功能&#xff0c;其中ChatGPT方面的突破尤为引人关注。而GPTs的亮相&#xff0c;不仅标志着个性化AI时代的到来&#xff0c;更为开发者和普通用户提供了前所未有的便利。接下来&#xff0…...

深度学习 vector 之模拟实现 vector (C++)

1. 基础框架 这里我们有三个私有变量&#xff0c;使用 _finish - _start 代表 _size&#xff0c;_end_of_storage - _start 代表 _capacity&#xff0c;并且使用到了模版&#xff0c;可以灵活定义存储不同类型的 vector&#xff0c;这里将代码量较小的函数直接定义在类的内部使…...

关于LLC知识10

在LLC谐振腔中能够变化的量 1、输入电压 2、Rac&#xff08;负载&#xff09; 所以增益曲线为红色&#xff08;Rac无穷大&#xff09;已经是工作的最大极限了&#xff0c;LLC不可能工作在红色曲线之外 负载越重时&#xff0c;增益曲线越往里面 假设&#xff1a; 输入电压…...

最长的严格递增或递减子数组

给你一个整数数组 nums 。 返回数组 nums 中 严格递增 或 严格递减 的最长非空子数组的长度。 示例 1&#xff1a; 输入&#xff1a;nums [1,4,3,3,2] 输出&#xff1a;2 解释&#xff1a; nums 中严格递增的子数组有[1]、[2]、[3]、[3]、[4] 以及 [1,4] 。 nums 中…...

【JavaEE】SpringBoot 统一功能处理:拦截器、统一数据返回与异常处理的综合应用与源码解析

目录 SpringBoot 统⼀功能处理拦截器拦截器快速⼊⻔拦截器详解拦截路径拦截器执⾏流程 登录校验定义拦截器注册配置拦截器 DispatcherServlet 源码分析(了解)初始化(了解) DispatcherServlet的初始化1. HttpServletBean.init()2. FrameworkServlet.initServletBean() WebApplic…...

I2C学习:上拉电阻选取

一&#xff0e;I2C简介 I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。I2C总线在使用时&#xff0c;需要接上拉电阻&#xff0c;这是因为I2C接口是开漏输出&#xff0c;如图1所示。 图1 I2C开漏输出 I2C有5种速度模式&#xff1a;标准&#xff08;100KHz&am…...

AC自动机-1

AC自动机&#xff08;Aho-Corasick Automaton&#xff09;是一种高效的多模式字符串匹配算法。它是由Alfred Aho和Margaret Corasick在1975年提出的。这种算法可以在一次扫描输入文本的情况下,同时查找多个模式串。 基本概念 Trie树 AC自动机是基于字典树数据结构构建的字典树…...

AI编码工作流:工程化实践框架与团队效能提升

1. 项目概述&#xff1a;从“AI编码工作流”说起最近在GitHub上看到一个挺有意思的项目&#xff0c;叫nicksp/ai-coding-workflow。光看这个名字&#xff0c;可能很多朋友会想&#xff0c;这不就是又一个教你怎么用ChatGPT或者Copilot写代码的教程吗&#xff1f;说实话&#xf…...

BookGet 终极指南:一键下载全球50+图书馆古籍资源的完整教程

BookGet 终极指南&#xff1a;一键下载全球50图书馆古籍资源的完整教程 【免费下载链接】bookget bookget 数字古籍图书下载工具。 项目地址: https://gitcode.com/gh_mirrors/bo/bookget 在数字时代&#xff0c;古籍研究者和历史爱好者面临着一个共同挑战&#xff1a;如…...

MATLAB集成大语言模型:架构设计与工程实践指南

1. 项目概述&#xff1a;当MATLAB遇见大语言模型如果你和我一样&#xff0c;是个长期泡在MATLAB环境里的工程师或研究员&#xff0c;面对这两年大语言模型&#xff08;LLM&#xff09;的狂潮&#xff0c;心里可能既兴奋又有点“隔岸观火”的疏离感。我们习惯了用MATLAB处理矩阵…...

2026亚洲消费电子展!媒体曝光资源加码

北京讯——2026年6月10日至12日&#xff0c;2026亚洲消费电子展将在北京盛大启幕。作为亚太消费电子领域极具影响力的行业盛会&#xff0c;本届展会全面升级品牌传播矩阵&#xff0c;百家主流媒体集结现场全程报道&#xff0c;全媒体曝光资源重磅加码。目前展会赞助合作席位余量…...

React极简表单库veyra-forms:轻量级、类型安全的表单状态管理方案

1. 项目概述&#xff1a;一个被低估的轻量级表单解决方案在Web开发的世界里&#xff0c;表单处理是个既基础又麻烦的活儿。从简单的联系表单到复杂的多步骤数据收集&#xff0c;开发者们总是在寻找一个平衡点&#xff1a;既要功能强大、易于集成&#xff0c;又要足够轻量、不拖…...

基于Adafruit Trinket的光控互动玩具:嵌入式系统入门实战

1. 项目概述&#xff1a;给毛绒玩具注入灵魂几年前&#xff0c;我女儿的一个旧毛绒玩具被冷落在角落&#xff0c;除了偶尔被当作抱枕&#xff0c;几乎失去了“玩具”的活力。这让我萌生了一个想法&#xff1a;能不能用一些简单的电子元件&#xff0c;让这些静态的玩偶重新“活”…...

告别玄学:给STM32/CH32V的SD卡SPI驱动加上超时、重试与状态机

从零构建工业级SD卡SPI驱动&#xff1a;超时重试与状态机设计实战 在嵌入式系统中&#xff0c;SD卡作为可靠的大容量存储介质被广泛应用。然而许多开发者都经历过这样的困境&#xff1a;实验室测试完美的SD卡驱动&#xff0c;一旦部署到真实环境中就频繁出现读写失败、卡死甚至…...

Protégé工具与OWL本体建模实践指南

1. 本体建模基础与Protg工具概述本体&#xff08;Ontology&#xff09;作为知识工程领域的核心概念&#xff0c;最初源自哲学领域&#xff0c;在计算机科学中被重新定义为"对共享概念体系的明确形式化规范说明"。在语义网架构中&#xff0c;本体位于XML和RDF层之上&a…...

你的群晖NAS性能过剩了吗?试试用它跑个万兆测速服务,榨干内网带宽

如何用群晖NAS搭建专业级内网测速平台&#xff1a;从硬件压榨到性能调优全指南 当你为家庭或工作室部署了万兆网络环境后&#xff0c;最令人抓狂的莫过于花了大价钱升级设备&#xff0c;却无法确认实际带宽是否达标。那些标榜"万兆兼容"的交换机、网卡和NAS&#xff…...

Python篇---常考的数据类型

一、常见数据类型及其特点Python 的数据类型可以分两大类&#xff1a;不可变类型和可变类型。这个区分是很多考点的基础。1. 不可变类型&#xff08;值变了&#xff0c;对象就换了&#xff09;整数 int特点&#xff1a;精度无限&#xff0c;只有整数不分长短。适合大数运算。考…...