可视化图解算法57:字符串的排列

牛客网 面试笔试 TOP101    |     LeetCode 3437. 全排列III

1. 题目

描述

输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。

例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。

数据范围:n < 10 要求:空间复杂度 O(n!),时间复杂度 O(n!)

输入描述:

输入一个字符串,长度不超过10,字符只包括大小写字母。

示例1

输入:

"ab"

返回值:

["ab","ba"]

说明:

返回["ba","ab"]也是正确的          

示例2

输入:

"aab"

返回值:

["aab","aba","baa"]

示例3

输入:

"abc"

返回值:

["abc","acb","bac","bca","cab","cba"]

示例4

输入:

" "

返回值:

[ ]

2. 解题思路

字符串的排列可以使用回溯算法,要注意字符串中有可能包含相同的字符。具体思路如下:

遍历每一个元素,以该元素作为开头的数字数列。首先选取该数字,并标记该数字已经使用过;再递归选择其他数字;撤销该数字,让其他数字作为开头。缩小数字区间:该元素已经使用过;当前元素与前一个元素一样,且前一个已经使用过。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1374917

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1368181

  • Golang版本:LeetCode数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibiliLeetCode数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1365124

3. 编码实现

核心代码如下:

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param str string字符串* @return string字符串一维数组*/
func Permutation(str string) []string {// write code hereresult = make([]string, 0)path = make([]string, 0)//字符串为数组arr := strings.Split(str, "")sort.Strings(arr)mark = make([]bool, len(arr))//回溯获取结果backtracking(arr)return result
}var (result []string //结果集path   []string //路径mark   []bool
)func backtracking(arr []string) {// 2. 递归终止条件:路径数组满了(找到一种路径),加入到输出列表if len(path) == len(arr) {//2.1 存放结果tmp := strings.Join(path, "") //切片转stringresult = append(result, tmp)//2.2 返回return}//1.选择:在本层集合中遍历元素for i := 0; i < len(arr); i++ {//1.4剪枝:// 1.4.1 元素已经使用过则不需要再加入了if mark[i] {continue}// 1.4.2 当前的元素charStr[i]与同一层的前一个元素charStr[i-1]相同且charStr[i-1]已经用过了if (i >= 1) && (arr[i] == arr[i-1] && mark[i-1]) {continue}//1.1 处理节点 (选取字符)path = append(path, arr[i]) //加入路径数组mark[i] = true              //标记为使用过// 1.2 递归(选择其他字符)backtracking(arr)//1.3 回溯,撤销选择path = path[:len(path)-1]mark[i] = false}
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:哔哩哔哩_bilibili

  • Java版本:哔哩哔哩_bilibili

  • Golang版本:哔哩哔哩_bilibili

4.小结

字符串的排列可以使用回溯算法,要注意字符串中有可能包含相同的字符。遍历每一个元素,以该元素作为开头的数字数列。首先选取该数字,并标记该数字已经使用过;再递归选择其他数字;撤销该数字,让其他数字作为开头。


《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:

  ✅   链表

  ✅   二叉树

  ✅   二分查找、排序

  ✅   堆、栈、队列

  ✅   回溯算法

  ✅   哈希算法

  ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ss897667807

  • Java编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ss161443488

  • Golang编码实现:LeetCode数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibiliLeetCode数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ss63997

对于数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:黄沙百战穿金甲,不破楼兰终不还。

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

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

相关文章

Go语言常量

目录 前言&#xff1a; 1、const声明常量 2、一次声明多个常量 前言&#xff1a; 这次来学习一下Go语言中的常量&#xff0c;在上一期中我学习了Go语言中的变量&#xff0c;如果有兴趣可以看看我往期的文章&#xff0c;或者点击Go语言声明变量。 相对于变量&#xff0c;常量的…

SelectDB:新一代实时数仓的核心引擎与应用实战

> 数据价值随时间流逝而衰减,而SelectDB让企业在数据洪流中抓住了每一秒的价值 在数字化转型浪潮中,企业数据呈现**爆发式增长**,传统数据仓库在实时性、查询效率和成本控制方面遭遇严峻挑战。中通快递的案例极具代表性——其原有架构处理分钟级查询时,资源消耗巨大,…

华为OD机考2025C卷 - 分配土地 (Java Python JS C++ C )

题目描述 从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字。 某天集体村民决定将覆盖相同数字的最小矩阵形的土地分配给村里做出巨大贡献的村民,请问此次分配土地,做出贡献的村民种最大会分配多大面积? 输入描述 第一行输入 m 和 n, m 代…

NetBSD notes

文章目录the introduce to NetBSDreferencesthe introduce to NetBSD NetBSD is a Unix-like Open Source operating system, which can run in many hardware platforms , and is advantageous to production and research.> boot hd0a:netbsd is used for booting NetBSD…

【数据迁移】Windows11 下将 Ubuntu 从 C 盘迁移到 D 盘

由于个人情况存在差异&#xff0c;请在参考本文进行数据迁移前后多方比对确认&#xff0c;确保无误后再谨慎操作&#xff01; 【2025-08-03补充】运行过程中发现实际上 docker 的迁移工作可能更为复杂&#xff01;强烈不推荐本文的 docker 迁移方法&#xff08;本文已翻车&…

Java面试(常考基础知识点)总结

1. 面向对象三大特性相关 1.1 三大特性 封装&#xff1a;对抽象的事物抽象化成一个对象&#xff0c;并对其对象的属性私有化&#xff0c;同时提供一些能被外界访问属性的方法&#xff1b;继承&#xff1a;子类扩展新的数据域或功能&#xff0c;并复用父类的属性与功能&#x…

[Shell编程] 零基础入门 Shell 编程:从概念到第一个脚本

目录 一、什么是 Shell&#xff1f;—— 连接用户与系统的 "桥梁" 二、常见的 Shell 类型 —— 不同系统的 "操作面板" 三、Shell 能做什么&#xff1f;—— 不止于 "输入命令" 1️⃣命令行操作&#xff1a;这是最基础的功能。通过ls&#x…

【数据结构】排序(sort) -- 插入排序

目录 一、插入排序 二、直接插入排序&#xff08;straight insertion sort&#xff09; 1. 思路介绍 2. 代码实现 3. 特性总结 三、希尔排序&#xff08;Shell sort&#xff09; 1. 思路介绍 2. 代码实现 3. 特性总结 四、总结 一、插入排序 常见的排序算法有&…

水面垃圾清扫船cad【6张】三维图+设计说明书

海洋吸尘器结构设计 摘 要 近年来&#xff0c;随着经济的快速发展&#xff0c;海洋产业及海上活动的增加&#xff0c;导致海洋漂浮垃圾越来越多&#xff0c;对沿岸的居民和海洋的生物的生命安全造成了很大的威胁&#xff0c;严重破坏海洋生态平衡。针对海洋垃圾污染这一主要问…

03-List列表数据类型

1.特点&#xff1a; 原属是字符串类型 列表头尾增删块&#xff0c;中间慢&#xff0c;增删元素是常态 元素可重复 最多包含2^32-1个元素 索引通python列表2.常用命令 ------增------ 1.从列表头部压入数据LPUSH key value1 value22.从列表尾部压入数据RPUSH key value1 value23…

防火墙认证用户部署

文章目录1、配置vlan2、防火墙配置&#xff08;1&#xff09;配置安全区域&#xff08;2&#xff09;接口加入安全区域(3)fw配置DHCP(4)地址组&#xff08;5&#xff09;管理员(6)用户认证1、配置vlan vlan batch 10 20 [Huawei-GigabitEthernet0/0/2]port link-type access …

Vue.js之监听器

watch侦听器&#xff1a;作用:监视数据变化&#xff0c;执行一些 业务逻辑 或 异步操作。 语法:简单写法→简单类型数据&#xff0c;直接监视完整写法 → 添加额外配置项 (1)deep:true 对复杂类型深度监视(2)immediate:true 初始化立刻执行一次handler方法//1.简单写法 data: {…

25电赛e题杂乱环境稳定识别矩形框(附源码)

​ 识别并跟踪矩形目标 识别视频中符合矩形轮廓的目标区域&#xff0c;并标记中心点位置。 实现思路 **图像预处理&#xff1a;灰度 二值化**闭运算消除孔洞二值化处理查找并筛选矩形轮廓解算中心点目标筛选结果绘制 环境 使用 OpenCV 和 python&#xff1a; 图像预处理…

【前端安全】聊聊 HTML 闭合优先级和浏览器解析顺序

【前端安全】聊聊浏览器解析顺序和 HTML 闭合优先级 最近在研究 XSS 的时候&#xff0c;发现一个特别容易被忽略的问题 —— 浏览器到底是怎么解析 HTML 的&#xff1f;为什么有些 payload 成功了&#xff0c;有些却怎么试都不行&#xff1f;其实这跟标签的闭合优先级还有解析顺…

PHP-分支语句、while循环、for循环

分支语句 无论在何种编程语言中&#xff0c;流程控制都是很重要的内容。由于 PHP 的大部分语法都继承了C语言的特点&#xff0c; 因此在流程控制方面&#xff0c;PHP 有着和C语言类似的流程控制。 if else 语句是流程控制中根据条件判断执行的一种。该语句执行时先对条件进行判…

并发编程常用工具类(下):CyclicBarrier 与 Phaser 的协同应用

在并发编程中&#xff0c;除了CountDownLatch和Semaphore&#xff0c;CyclicBarrier和Phaser也是实现多线程协作的重要工具。它们在处理多阶段任务同步、动态调整参与线程等场景中展现出独特价值。本文作为并发工具类系列的第二篇&#xff0c;将深入解析CyclicBarrier和Phaser的…

机器人焊接节气装置

在摩托车制造过程中&#xff0c;精密部件的焊接质量直接影响整车的安全性和操控性能。以发动机缸体焊接为例&#xff0c;传统手工焊接容易出现焊缝不均匀的问题&#xff0c;而采用六轴弧焊机器人后&#xff0c;焊接精度能控制在0.1毫米以内。日本川崎重工的生产数据显示&#x…

使用yolo11训练食物浪费检测数据集VOC+YOLO格式6734张32类别步骤和流程

【数据集介绍】数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;6734标注数量(xml文件个数)&#xff1a;6734标注数量(txt文件个数)&#xff1…

掌握PowerPC架构与编程技巧:技术资料详解

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;PowerPC是一种高性能的RISC架构&#xff0c;最初由IBM、Motorola和Apple联合开发&#xff0c;被设计用于高端工作站和服务器&#xff0c;同时广泛应用于嵌入式系统、航空电子设备、游戏主机和超级计算机等领域。…

VR 企业展厅:开启数字化展示新时代

在当今数字化浪潮席卷各行各业的时代&#xff0c;企业的展示与宣传方式也在不断革新。VR&#xff08;虚拟现实&#xff09;技术的出现&#xff0c;为企业展厅带来了全新的变革&#xff0c;使其从传统的实体展示空间&#xff0c;转变为具有无限可能的数字化虚拟空间。一、VR 企业…