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

力扣面试题 - 08.07.无重复字符串的排列组合 C语言解法 回溯递归dfs深度优先

题目:

无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。

示例 1:

 输入:S = "qwe"
 输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]

示例 2:

 输入:S = "ab"
 输出:["ab", "ba"]

提示:

  1. 字符都是英文字母。
  2. 字符串长度在[1, 9]之间。

思路:

  1. 排列组合问题,首先想到的就是回溯算法。关于回溯算法,可以csdn自行搜索了解详情。
  2. 如果我们知道ab的排列组合,那我们如何通过它知道abc的排列组合呢?
  3. 我们可以通过把c插入到ab的排列组合中的不同位置,从而得到abc的排列组合。
  4. 通过回溯,我们可以暴力解出所以答案。

下图是题解区大佬(大山_24th)画的图,可以参考一下。

C语言代码:

/*** Note: The returned array must be malloced, assume caller calls free().*/
int retSize;
void DFS(char* S, int len, char* temp, int* used, char** ret, int depth){// 终止条件if(len == depth){temp[depth] = '\0';// 收集结果ret[retSize] = (char*)malloc((len + 1) * sizeof(char));strcpy(ret[retSize], temp); // 将当前结果复制到结果数组中retSize++;return;}// 遍历一遍字符串字母(为什么不是i <= len,因为'\0'也占一个长度)for(int i = 0; i < len; i++){// 检查当前字母是否使用过if(used[i]){continue; // continue语句,跳过当此的循环,但不跳出循环}// 将当前的字母存入临时结果数组中temp[depth] = S[i];// 该字母已使用,标记为1used[i] = 1;DFS(S, len, temp, used, ret, depth + 1);// 回溯操作,在另外的遍历中,该字母并未使用,回溯复原used[i] = 0;}
}char** permutation(char* S, int* returnSize) {int len = strlen(S);char** ret = (char**)malloc(100000 * sizeof(char*));char* temp = (char*)malloc((len + 1) * sizeof(char));int* used = (int*)malloc(len * sizeof(int));memset(used, 0, len * sizeof(int));retSize = 0;DFS(S, len, temp, used, ret, 0);*returnSize = retSize;return ret;
}

回溯算法代码的基本框架:

void backTrack(参数){if(终止条件){收集结果;return;}for(集合元素){处理节点;递归函数;回溯操作;}return;
}

递归三要素:

  • 明确终止条件
  • 确定终止时的做法
  • 提取重复部分

相关文章:

力扣面试题 - 08.07.无重复字符串的排列组合 C语言解法 回溯递归dfs深度优先

题目&#xff1a; 无重复字符串的排列组合。编写一种方法&#xff0c;计算某字符串的所有排列组合&#xff0c;字符串每个字符均不相同。 示例 1&#xff1a; 输入&#xff1a;S "qwe"输出&#xff1a;["qwe", "qew", "wqe", "…...

数值分析速成复习笔记

请确保你有10hour的有效学习时间&#xff0c;保你拿90 证明部分 编程部分...

1.07 标准IO

1.思维导图 2.先编写以下结构体 struct Student { char name[20]&#xff1b; double math&#xff1b; double chinese&#xff1b; double english&#xff1b; double physical&#xff1b; double chemical&#xff1b; double…...

单片机实现模式转换

[任务] 要求通过单片机实现以下功能&#xff1a; 1.单片机有三种工作模式(定义全局变量MM表示模式&#xff0c;MM1&#xff0c;2&#xff0c;3表示三种不同的模式) LED控制模式 风扇控制模式 蜂鸣器控制模式 2.可以在某一个模式下通过拓展板KEY1按键控制设备 (按…...

JVM实战—OOM的定位和解决

1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是&#xff1a;建立一套监控平台&#xff0c;比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台&#xff0c;就可以接入系统异常的监控和报警&#xff0c;可以设置当系统出现OOM异常&…...

GolangWeb开发- net/http模块

文章目录 Golang开发-案例整理汇总一、net/http介绍二、HTTP客户端Get请求Post请求三、HTTP服务端总结Golang开发经典案例,点击下方链接 Golang开发-案例整理汇总 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 文档链接: https://pkg.go.dev/n…...

算法:线性查找

线性查找算法是一种简单的查找算法,用于在一个数组或列表中查找一个特定的元素。它从数组的第一个元素开始,逐个检查每个元素,直到找到所需的元素或搜索完整个数组。线性查找的时间复杂度为O(n),其中n是数组中的元素数量。 实现原理 从列表的第一个元素开始,逐个检查每个…...

基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)

已完成功能&#xff1a; 支持 GET 和 POST 请求的路由与回调处理。 解析URL请求。 单例模式 管理核心业务逻辑。 异步 I/O 技术和 定时器 控制超时。 通过回调函数注册机制&#xff0c;可以灵活地为不同的 URL 路由注册处理函数。 1. 项目背景 1.1 项目简介 本项目是一个基于…...

『SQLite』常见函数的使用

摘要&#xff1a;主要讲解SQLite中的常见函数&#xff0c;有聚合函数、数字函数、字符串函数、日期函数、类型转换函数等。 主要函数 聚合函数&#xff1a;count()、sum()、avg()、min()、max()字符串函数&#xff1a;length()、upper()、lower()、substr()、trim()日期和时间…...

win下搭建elk并集成springboot

一、ELK 是什么&#xff1f; ELK 实际上是三个工具的集合&#xff0c;Elasticsearch Logstash Kibana&#xff0c;这三个工具组合形成了一套实用、易用的监控架构&#xff0c;很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…...

ABAQUS柱状晶模型基于泰森多边形建模

建立柱状晶几何模型进行有限元分析有助于深入理解材料的微观结构与宏观性能之间的关系&#xff0c;为材料设计、制造工艺优化及失效预测提供了强有力的工具。本案例介绍采用AutoCAD基于泰森多边形算法生成柱状晶三维几何部件&#xff0c;并导入Abaqus有限元软件内建立包含晶粒及…...

MySQL InnoDB常用锁总结(行锁、间隙锁、临键锁、表锁)

在高并发数据库系统中&#xff0c;锁机制是保障数据一致性和事务隔离性的重要手段。MySQL 的 InnoDB 存储引擎提供了多种锁类型&#xff0c;包括行锁、间隙锁、临键锁和表锁。本文将详细介绍这些锁的原理、使用场景及其注意事项&#xff0c;并结合案例进行说明。 1. 表锁 概念…...

Flink系统知识讲解之:如何识别反压的源头

Flink系统知识之&#xff1a;如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念&#xff0c;强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理&#xff0c;这里有…...

UE5行为树浅析

Tree 什么是树&#xff1f; 树是由节点或顶点和边组成的数据结构&#xff0c;没有任何循环。没有节点的树称为空树或空树。 非空的树由根节点和可能形成层次结构的多层附加节点组成。 树是一种数据结构树由点和有向边组成树是连通的&#xff0c;可达的树有执行顺序树没有环 …...

大模型测试-数飞机个数

时间是2025年1月7日&#xff0c;测试下各大网页端大模型的多模态识图能力。 测试题目 图片 问题 标记一下图里的飞机&#xff0c;并数一下飞机的个数 测试结果 千问qwen 在这张图片中&#xff0c;我可以看到总共12架飞机。以下是它们的位置标记&#xff1a;左上角跑道上有…...

Ubuntu挂载Windows 磁盘,双系统

首先我们需要在终端输入这个命令&#xff0c;来查看磁盘分配情况 lsblk -f 找到需要挂载的磁盘&#xff0c;检查其类型&#xff08; 我的/dev/nvme2n1p1类型是ntfs&#xff0c;名字叫3500winData&#xff09; 然后新建一个挂载磁盘的目录&#xff0c;我的是/media/zeqi/3500wi…...

快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)

1 关于Let’s Encrypt与Cerbot DNS验证 Let’s Encrypt 是一个提供 免费证书 的 认证机构。 Cerbot 是 Let’s Encrypt 提供的一个工具&#xff0c;用于自动化生成、验证和续订证书。 DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证&#xff0c;DNS …...

【项目】修改远程仓库地址、报错jdk

一、修改远程仓库地址 进入你刚刚克隆到本地的仓库目录&#xff0c;执行以下命令来修改远程仓库的 URL&#xff0c;将其指向你自己的新仓库&#xff1a; cd 原仓库名 git remote set-url origin <你自己的新仓库的 Git 地址>二、运行报错 多数jdk版本问题 三、 知识图…...

.NET体系架构

引言 .NET是由微软开发的一个广泛应用的开发平台&#xff0c;旨在帮助开发者构建各种类型的应用程序&#xff0c;包括桌面应用、Web应用、移动应用和云服务。最初&#xff0c;.NET平台的构建主要集中在Windows环境上&#xff0c;但随着.NET Core和随后.NET 5及以上版本的推出&…...

MTK平台-- 无线AP隔离功能

前言: 无线AP上大都有一个选项:启用该功能后,连接到同一AP的无线终端之间不能互相通信,但该功能并不限制无线终端和有线终端之间的通信。 Hostapd参数ap_isolate,用于控制AP隔离,但hostapd本身并不实现这一功能,只是将该参数通过nl80211传递给mac80211,由mac80211来实…...

初学stm32 --- 电源监控

目录 STM32 电源监控介绍 上电/掉电复位POR/PDR&#xff08;F1&#xff09; 可编程电压检测器(PVD)&#xff08;F1&#xff09; PVD相关寄存器介绍&#xff08;F1&#xff09; 电源控制寄存器 PWR_CR 电源控制/状态寄存器 PWR_CSR PVD相关HAL库驱动介绍 PVD的使用步骤 …...

小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式

这一节目标是实现底部推荐商品的结构和样式&#xff0c;由于这里要求横向滚动&#xff0c;所以需要使用上节介绍的 scroll-view 功能&#xff0c;并使用 scroll-x 属性支持横向滚动&#xff0c;推荐商品区域中的每一个商品是一个单独的 view&#xff0c;每个view 中需要写三个组…...

深入了解 SSL/TLS 协议及其工作原理

深入了解 SSL/TLS 协议及其工作原理 一. 什么是 SSL/TLS?二. SSL/TLS 握手过程三. SSL/TLS 数据加密与传输四. 总结 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都在歌唱 一. 什么是 SSL/TLS? 安全套接层&am…...

解决RuntimeError: No CUDA GPUs are available问题

今天运行之前可以正常运行的项目时&#xff0c;发现了以下问题&#xff1a; 接下来记录解决过程&#xff1a; 参考&#xff1a;os.environ[“CUDA_VISIBLE_DEVICES”]"2"的问题 因为代码中设置了选择了具体的GPU的型号&#xff0c;但是有可能没有这个GPU&#xff0…...

了解RabbitMQ中的Exchange:深入解析与实践应用

在分布式系统设计中&#xff0c;消息队列&#xff08;Message Queue&#xff09;扮演着至关重要的角色&#xff0c;而RabbitMQ作为开源消息代理软件的佼佼者&#xff0c;以其高性能、高可用性和丰富的功能特性&#xff0c;成为了众多开发者的首选。在RabbitMQ的核心组件中&…...

33.3K 的Freqtrade:开启加密货币自动化交易之旅

“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手&#xff0c;能够连接到众多主流加密货币交易所&#xff0c;如 Binance、Bitmart、Bybit 等&#xff08;支…...

(概率论)区间估计 和 置信区间 、 假设检验

参考文章1&#xff1a;3分钟&#xff0c;看懂区间估计and置信区间 - 知乎 (zhihu.com) 1、点估计的定义&#xff1a; 2、区间估计的定义&#xff1a; 参考文章2&#xff1a;【概率论】- (1)区间估计 - 知乎 (zhihu.com) 这篇文章中的2中&#xff0c;2.1、2.2、2.3描述了需要用到…...

MBTiles 及爬取到发布

MBTiles &#xff1a;https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准&#xff0c;该标准的目的是即时传输和使用数据。 作为一个容器格式&#xff0c;MBTiles可以存储任何瓦片数据,…...

uniapp使用chooseLocation安卓篇

本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称&#xff1a; res.name);console.log(详细地…...

el-cascader 树状选择-点击父级禁用子级

背景&#xff1a;项目上需要实现树状选择&#xff0c;点击父级禁用子级的功能&#xff0c;element组件本身没有该配置项说明&#xff1a;需要实现几个功能点&#xff1a;点击父级禁用子级&#xff1b;再次点击取消禁用&#xff1b;仅回填所选级&#xff1b;上下级不关联实现代码…...

力扣经典题目之219. 存在重复元素 II

今天继续给大家分享一道力扣的做题心得今天这道题目是 219. 存在重复元素 II&#xff0c;我使用 hashmap 的方法来解题 题目如下&#xff0c;题目链接&#xff1a;219. 存在重复元素 II 1&#xff0c;题目分析 此题目给我们了一个整数数组 nums 和一个整数 k &#xff0c;需要…...

微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城

1.微服务保护 微服务保护是确保微服务架构可靠、稳定和安全的策略与技术。 在可靠性上&#xff0c;限流是控制进入微服务的请求数量&#xff0c;防止流量过大导致服务崩溃。比如电商促销时对商品详情服务进行流量限制。熔断是当被调用的微服务故障过多或响应过慢时&#xff0c;…...

Wireshark 学习笔记1

1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 &#xff08;1&#xff09;选择合适的网卡 &#xff08;2&#xff09;开始捕获数据包 &#xff08;3&#xff09;过滤掉无用的数据包 &#xff08;4&#xff09;将捕获到的数据包保存为文件…...

voice agent实现方案调研

前言 目前语音交互主要的实现大体有两种: 级联方案,指的是,大规模语言模型 (LLM)、文本转语音 (TTS) 和语音转文本 (STT),客户的话通过vad断句到STT的语音转文本,经过大模型进行生成文本,生成文本后通过TTS进行回复给用户。(主流方案)端到端的方案,开发者无需再…...

pgpool配置安装之服务器的配置

第 1 章.服务器配置 1.1. 设置参数 1.1.1. 参数名称和值 所有参数名称均不区分大小写。每个参数都采用 值为以下五种类型之一&#xff1a;boolean、string、integer、floating point、 或枚举 &#xff08;enum&#xff09;。类型决定了设置 参数&#xff1a; 布尔&#xf…...

C++实现银行排队系统

网上看到的设计要求&#xff1a; 基本效果已经实现&#xff0c;希望大家帮忙指点指点。 程序中的一些基本模块 程序处理中的一些流程图 程序运行结果如下图&#xff1a; 程序代码如下&#xff1a; #include <iostream> #include <string> #include <random&g…...

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…...

多行输入模式(dquote> 提示符)double quote(双引号)

文章目录 1、引号不匹配具体原因解决办法如何避免此问题 2、double quote&#xff08;双引号&#xff09;出现原因解决办法预防措施 ~/Downloads/productqualification-develop git:[main] git commit -m "漏添加到暂存区的代码“ dgqdgqdeMac-mini productqualification-…...

【Uniapp-Vue3】原生事件监听及组件内置事件处理

如果我们想给元素添加一个事件就要使用到v-on&#xff0c;也可以简写为&#xff1a; <标签名 v-on:事件名"函数"></标签名> 或简写为 <标签名 事件名"函数"></标签名> 比如我们想要实现点击一下元素&#xff0c;num就1&#xff0c…...

微软 2024 最新技术全景洞察

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、Java 与 Python 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在未来…...

PHP语言的并发编程

PHP语言的并发编程 引言 随着互联网技术的迅速发展&#xff0c;Web 应用的复杂性和用户并发请求的增加&#xff0c;要求开发者在构建高性能应用时考虑并发编程。并发编程允许程序在同一时间执行多个任务&#xff0c;这对于处理高流量网站、API 和实时应用程序至关重要。虽然 …...

Nginx 解析漏洞复现

漏洞原理 该漏洞与Nginx、php版本无关&#xff0c;属于用户配置不当造成的解析漏洞。主要是由于下面两个配置的错误&#xff1a; cgi.fix_pathinfo1&#xff0c;该配置项的作用是如果访问的.php文件不存在&#xff0c;则采用上层路径&#xff0c;例如访问/test.png/.php,一般…...

使用XAML语言仿写BiliBil登录界面

实现步骤 实现左右布局 使用了Grid两列的网格布局&#xff0c;第一列宽度占35%&#xff0c;第二列宽度占65%。使用容器布局Border包裹左右布局内容&#xff0c;设置背景色、设置圆角 <!-- 定义两列--> <Grid.ColumnDefinitions><ColumnDefinition Width &quo…...

Kubernetes Gateway API-4-TCPRoute和GRPCRoute

1 TCPRoute 目前 TCP routing 还处于实验阶段。 Gateway API 被设计为与多个协议一起工作&#xff0c;TCPRoute 就是这样一个允许管理TCP流量的路由。 在这个例子中&#xff0c;我们有一个 Gateway 资源和两个 TCPRoute 资源&#xff0c;它们按照以下规则分配流量&#xff1…...

【C++动态规划 前缀和】3250. 单调数组对的数目 I|1897

本文涉及知识点 C动态规划 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode3250. 单调数组对的数目 I 给你一个长度为 n 的 正 整数数组 nums 。 如果两个 非负 整数数组 (arr1, arr2) 满足以下条件&#xff0c;我们称它们是 单调…...

【机器学习:五、使梯度下降法更快收敛的技巧】

1. 特征缩放 1.1 特征缩放的作用 特征缩放是一种将不同特征值归一化到相似范围的技术&#xff0c;可以显著提高梯度下降法的收敛速度。 作用&#xff1a; 避免数值差异导致的优化困难&#xff1a;当特征值范围差异较大时&#xff0c;代价函数呈现“长而窄”的形状&#xff0…...

系统思考—结构影响行为

托尔斯泰在《安娜卡列尼娜》中说&#xff1a;“幸福的家庭都是相似的&#xff0c;不幸的家庭各有各的不幸。”在企业经营管理中也如此——企业剧本总是相似&#xff0c;只是男女主角不同。 但无论外在表现如何变化&#xff0c;真正决定企业命运的&#xff0c;是系统结构。 企业…...

WorldQuant Settings 配置项名词解释

中文翻译及通俗解释 语言(Language) 解释:BRAIN 平台支持使用快速表达式(Fast Expression)语言。 例子:快速表达式就像写公式,比如 price + volume,简单易懂且高效。更多内容可以参考“可用操作符”。 工具类型(Instrument type) 解释:目前只能使用“股票”作为工…...

mybatisPlus动态sql语句 ${ew.sqlSegment}

mybatis-plus的${ew.sqlSegment}&#xff0c;${ew.sqlSelect}&#xff0c;${ew.customSqlSegment} ew是mapper方法里的Param(Constants.WRAPPER) Wrapper queryWrapper对象 简答介绍&#xff1a; ${ew.sqlSelect}&#xff1a;拼接select SQL主体 Select("select ${ew.…...

ATGM336H-5N71支持多种卫星导航系统的定位模块

ATGM336H-5N7 1是 9.7X10.1尺寸&#xff0c;AT6558芯片&#xff0c;导航模块&#xff0c;GPSBDSGLONASS定位&#xff0c;16.369M晶振&#xff0c;标准输出 &#xff0c;电源2.7V~3.6V, 支持 UART0和UART1接口 . ATGM336H-5N特性&#xff1a; Flash TCXO 天线检测 天线过流保护 …...