【回溯】目标和 字母大小全排列
文章目录
- 494. 目标和
- 解题思路:回溯
- 784. 字母大小写全排列
- 解题思路:回溯
494. 目标和
494. 目标和
给你一个非负整数数组 nums 和一个整数 target 。
向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :
- 例如,
nums = [2, 1],可以在2之前添加'+',在1之前添加'-',然后串联起来得到表达式"+2-1"。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。
示例 1:
输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3
示例 2:
输入:nums = [1], target = 1
输出:1
提示:
1 <= nums.length <= 200 <= nums[i] <= 10000 <= sum(nums[i]) <= 1000-1000 <= target <= 1000
解题思路:回溯
这道题我们在背包问题专题就遇到过,其实用回溯来解决这道题是更简单的,不像动态规划那么复杂,但是缺点就是时间复杂度肯定要高得多,这没办法!不过我们是回溯专题,所以就用回溯来求解这道题!
其实这道题用回溯并不难,就是一个暴力搜索,因为对于一个 nums 数组,每个元素我们可以看作两个选择:nums[i] 和 -nums[i]。然后我们只要递归遍历这两种选择对于所有元素的所有路径,最后判断符合要求的就累加次数即可!
下面是算法步骤:
-
函数头的设计:
-
首先我们需要一个 全局变量
ret,来存放结果集,至于为什么作为全局变量,前面强调很多次了,就是简化函数头的参数。 -
然后因为我们需要知道当前遍历到哪个元素了,所以需要一个 局部
index变量来标识下标! -
最后还需要一个 局部变量
path,存放当前路径的运算结果!这道题其实将path设为全局变量的话,我们就要写冗余的代码,并且会超时,所以这里干脆将其作为函数参数进行传递即可!void dfs(vector<int>& nums, int target, int index, int path);
-
-
函数体的内容:
-
函数体很简单,就是递归正负数两种情况:
dfs(nums, target, index + 1, path + nums[index]); // 正数处理 dfs(nums, target, index + 1, path - nums[index]); // 负数处理
-
-
递归函数出口:
-
当下标遍历超出数组范围了,则此时判断一下此时运算结果是否符合要求,然后进行返回即可:
// 递归函数出口 if(index == nums.size()) {if(path == target)ret++;return; }
-
完整代码如下所示:
class Solution {int ret; // 存放结果集
public:int findTargetSumWays(vector<int>& nums, int target) {dfs(nums, target, 0, 0);return ret;}void dfs(vector<int>& nums, int target, int index, int path){// 递归函数出口if(index == nums.size()){if(path == target)ret++;return;}dfs(nums, target, index + 1, path + nums[index]); // 正数处理dfs(nums, target, index + 1, path - nums[index]); // 负数处理}
};
784. 字母大小写全排列
784. 字母大小写全排列
给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。
返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
示例 1:
输入:s = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]
示例 2:
输入: s = "3z4"
输出: ["3z4","3Z4"]
提示:
1 <= s.length <= 12s由小写英文字母、大写英文字母和数字组成
解题思路:回溯
相信做了这么多回溯练习,这道题就不会很难了,其实也就是一个排列的问题!
根据题意,对于数字字符来说,它只有一种选择,就是直接添加到结果集中,没有其它的路径可以选择!而对于字母字符来说就不一样了,它是有两条路径可以选择的,第一条就是它本身,假如它是小写的话,那么第二条路径就是它的大写的情况!
综上所述,对于数字字符我们只需要进行一次三部曲操作(即处理当前节点、递归、回溯处理),而 对于字母字符来说则需要进行两次三部曲操作,如下图所示:

然后剩下要注意的就是对于字母字符进行第二次三部曲操作之前,要先将第一次三部曲操作的回溯处理完成了,再进行第二次三部曲操作,不然会影响结果的!
剩下的都是一样的!
class Solution {
private:vector<string> ret; // 存放结果集string path; // 存放当前路径字符的字符串
public:vector<string> letterCasePermutation(string s) {dfs(s, 0);return ret;}void dfs(string& s, int index){// 递归函数出口if(index == s.size()){ret.push_back(path);return;}// 进行一次处理当前节点、递归path.push_back(s[index]);dfs(s, index + 1);// 如果是字母的话,则要再处理其对应大小写的另一条路径if(s[index] < '0' || s[index] > '9'){path.pop_back(); // 先把上面那次递归的结果进行回溯处理if(s[index] >= 'a' && s[index] <= 'z')path.push_back(s[index] - 32);elsepath.push_back(s[index] + 32);dfs(s, index + 1);}// 进行回溯处理path.pop_back();}
};
相关文章:
【回溯】目标和 字母大小全排列
文章目录 494. 目标和解题思路:回溯784. 字母大小写全排列解题思路:回溯 494. 目标和 494. 目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式…...
Linux系统上安装与配置 MySQL( CentOS 7 )
目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …...
Miniconda 安装及使用
文章目录 前言1、Miniconda 简介2、Linux 环境说明2.1、安装2.2、配置2.3、常用命令2.4、常见问题及解决方案 前言 在 Python 中,“环境管理”是一个非常重要的概念,它主要是指对 Python 解释器及其相关依赖库进行管理和隔离,以确保开发环境…...
记录一次,PyQT的报错,多线程Udp失效,使用工具如netstat来检查端口使用情况。
1.问题 报错Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 932, in _bootstrap_inner File "threading.py", line 870, in run File "main.py", line 456, in udp_recv IndexError: list…...
kamailio-ACC_JSON模块详解【后端语言go】
要确认 ACC_JSON 模块是否已经成功将计费信息推送到消息队列(MQueue),以及如何从队列中取值,可以按照以下步骤进行操作: 1. 确认 ACC_JSON 已推送到队列 1.1 配置 ACC_JSON 确保 ACC_JSON 模块已正确配置并启用。以下…...
群晖NAS安卓Calibre 个人图书馆
docker 下载镜像johngong/calibre-web,安装之 我是本地的/docker/xxx/metadata目录 映射到 /usr/local/calibre-web/app/cps/metadata_provider CALIBREDB_OTHER_OPTION 删除 CALIBRE_SERVER_USER calibre_server_user 缺省用户名口令 admin admin123 另外有个N…...
android主题设置为..DarkActionBar.Bridge时自定义DatePicker选中日期颜色
安卓自定义DatePicker选中日期颜色 背景:解决方案:方案一:方案二:实践效果: 背景: 最近在尝试用原生安卓实现仿element-ui表单校验功能,其中的的选择日期涉及到安卓DatePicker组件的使用&#…...
pytorch实现基于Word2Vec的词嵌入
PyTorch 实现 Word2Vec(Skip-gram 模型) 的完整代码,使用 中文语料 进行训练,包括数据预处理、模型定义、训练和测试。 1. 主要特点 支持中文数据,基于 jieba 进行分词 使用 Skip-gram 进行训练,适用于小数据集 支持负采样,提升训练效率 使用 cosine similarity 计算相…...
彩色控制台,自动换行...学习个新概念:流操控器![more cpp--11]
孩子们,我回来了。先看看今天我又学了什么CPP的没啥用新特性。彩色的控制台! 还有很多的新花样! 事情要从去年八月讲起,我那个时候在研究流函数,写了一些比较愚笨的代码。 为什么要研究这个呢?虽然我们的C…...
基于单片机的盲人智能水杯系统(论文+源码)
1 总体方案设计 本次基于单片机的盲人智能水杯设计,采用的是DS18B20实现杯中水温的检测,采用HX711及应力片实现杯中水里的检测,采用DS1302实现时钟计时功能,采用TTS语音模块实现语音播报的功能,并结合STC89C52单片机作…...
TensorFlow 示例摄氏度到华氏度的转换(一)
TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换,可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …...
win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist)
win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist) 前言一、本地部署DeepSeek-r1step1 安装ollamastep2 下载deepseek-r1step2.1 找到模型deepseek-r1step2.2 cmd里粘贴 后按回车,进行下载 ste…...
【memgpt】letta 课程6: 多agent编排
Lab 6: Multi-Agent Orchestration 多代理协作 letta 是作为一个服务存在的,app通过restful api 通信 多智能体之间如何协调与沟通? 相互发送消息共享内存块,让代理同步到不同的服务的内存块...
Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
【Linux】opencv在arm64上提示找不到libjasper-dev
解决opencv在arm64上提示找不到libjasper-dev的问题。 本文首发于❄慕雪的寒舍 问题说明 最近我在尝试编译opencv,安装依赖项libjasper1和libjasper-dev的时候就遇到了这个问题。在amd64平台上,我们可以通过下面的命令安装(ubuntu18.04&…...
计算机组成原理——存储系统(一)
在人生的道路上,成功与失败交织成一幅丰富多彩的画卷。不论我们是面对胜利的喜悦,还是遭遇失败的痛苦,都不能放弃对梦想的追求。正是在这种追求中,我们不断地超越自我,不断地突破自己的极限。只有勇往直前,…...
【LLM-agent】(task4)搜索引擎Agent
note 新增工具:搜索引擎Agent 文章目录 note一、搜索引擎AgentReference 一、搜索引擎Agent import os from dotenv import load_dotenv# 加载环境变量 load_dotenv() # 初始化变量 base_url None chat_model None api_key None# 使用with语句打开文件…...
LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控
在电机自动化生产线中,实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台,可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标,包括硬件选择、软件架构设…...
Baklib揭示内容中台与人工智能技术的创新协同效应
内容概要 在当今信息爆炸的时代,内容的高效生产与分发已成为各行业竞争的关键。内容中台与人工智能技术的结合,为企业提供了一种新颖的解决方案,使得内容创造的流程更加智能化和高效化。 内容中台作为信息流动的核心,能够集中管…...
18.Word:数据库培训课程❗【34】
目录 题目 NO1.2.3.4 NO5设置文档内容的格式与样式 NO6 NO7 NO8.9 NO10.11标签邮件合并 题目 NO1.2.3.4 FnF12:打开"Word素材.docx”文件,将其另存为"Word.docx”在考生文件夹下之后到任务9的所有操作均基于此文件:"Word.docx”…...
git多人协作
目录 一、项目克隆 二、 1、进入克隆仓库设置 2、协作处理 3、冲突处理 4、多人协作分支的推送拉取删除 1、分支推送(2种) 2、远程分支拉取(2种) 3、远程分支删除 一、项目克隆 git clone 画船听雨眠/test1 (自定义的名…...
团体程序设计天梯赛-练习集——L1-030 一帮一
前言 一道15分的题目,难度还可以,题目的内容都在幻想中,看题 L1-030 一帮一 “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个…...
什么是线性化PDF?
线性化PDF是一种特殊的PDF文件组织方式。 总体而言,PDF是一种极为优雅且设计精良的格式。PDF由大量PDF对象构成,这些对象用于创建页面。相关信息存储在一棵二叉树中,该二叉树同时记录文件中每个对象的位置。因此,打开文件时只需加…...
DRM系列四:初始化drm设备--drm_dev_init
本系列文章基于linux 5.15 一、drm_dev_alloc 用于分配并初始化一个新的 DRM 设备(即drm_device),初始化主要调用drm_dev_init函数 1.1drm_dev_init drm_device的初始化操作,但是并不会注册,函数定义在drivers/gpu/drm/drm_drv.c 其主要的作用&#…...
SpringMVC的参数处理
一、参数接收 1.使用servlet API接收参数 在方法参数中添加HttpServletRequest类型的参数,然后就可以像servlet的方法一样来接收参数 2.在方法中定义同名参数 如果url地址中的参数名与方法的参数名不一致时,可以使用RequestParam注解进行重新关联 url地…...
一觉醒来全球编码能力下降100000倍,新手小白的我决定科普C语言——函数
1. 函数的概念 数学中我们其实就⻅过函数的概念,⽐如:⼀次函数 y kx b ,k和b都是常数,给⼀个任意的 x,就得到⼀个y值。其实在C语⾔也引⼊函数(function)的概念,有些翻译为…...
台账思维和GIS思维在资产管理中的不同模式
最近一些习惯用台账统计资产的网友聊天引发一些感想和大家分享一下:传统台账思维注重统计资产的数量及信息完整性,而GIS除了关心前两个指标外,更注重数据与现实世界是否能一一对应,即数据的现实准确性! 例如࿱…...
AI-ISP论文Learning to See in the Dark解读
论文地址:Learning to See in the Dark 图1. 利用卷积网络进行极微光成像。黑暗的室内环境。相机处的照度小于0.1勒克斯。索尼α7S II传感器曝光时间为1/30秒。(a) 相机在ISO 8000下拍摄的图像。(b) 相机在ISO 409600下拍摄的图像。该图像存在噪点和色彩偏差。©…...
性能优化2-删除无效引用
依赖错综复杂,如何判断是有效依赖 1. package.json webpack升到3以后,未使用的dependence不会被打包;devDependence和dependence基本没啥区别;即生产依赖放入dev中,也能正常打包;但我们仍需遵守依赖的放置…...
Kafka SASL/PLAIN介绍
文章目录 Kafka SASL/PLAIN介绍1. SASL/PLAIN 简介2. 配置步骤(1)Kafka 服务器端配置(2)Kafka 客户端配置(3)测试连接 3. 认证过程3.1 SASL/PLAIN 认证工作原理3.2 认证过程描述 4. 安全性考虑4.1 SASL/PLA…...
