BM58 字符串的排列

1.题目描述

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

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

数据范围:n<10n<10
要求:空间复杂度 O(n!)O(n!),时间复杂度 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.解题思路

思路与BM56相同,有重复项数字的全排列是使用ArrayList构建path,而本题res中保存的是String类型,所以我们需要使用一个StringBuilder构建path,去重思路为当前遍历到的元素和之前元素相同且前一个元素未被访问,则跳过这次循环。

3.代码实现

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param str string字符串 * @return string字符串ArrayList*/public ArrayList<String> res = new ArrayList<>();public StringBuilder path = new StringBuilder();public ArrayList<String> Permutation (String str) {// write code hereif (str.length() == 0) {res.add(str);return res;}char[] array =  str.toCharArray();Arrays.sort(array);boolean[] visited = new boolean[array.length];backTracking(array,visited);return res;}public void backTracking(char[] array, boolean[] visited) {if (path.length() == array.length) {res.add(path.toString());return;}for (int i = 0; i < array.length; i++) {if (visited[i] || (i > 0 && array[i] == array[i-1] && visited[i-1] == false)) {continue;}visited[i] = true;path.append(array[i]);backTracking(array,visited);path.deleteCharAt(path.length()-1);visited[i] = false;}}
}

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

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

相关文章

本地搭建rtmp拉流

本地搭建rtmp拉流 可按照步骤来 关注公众号&#xff1a;城羽海 更多有趣实用教程 下载地址: 从微信公众号发送关键词 rtmp可获取下载地址 文章目录 本地搭建rtmp拉流 可按照步骤来 关注公众号&#xff1a;城羽海 更多有趣实用教程 拿到之后如图所下&#xff1f;二、配置obs文…

华为网络模拟器eNSP安装部署教程

eNSP是图形化网络仿真平台&#xff0c;该平台通过对真实网络设备的仿真模拟&#xff0c;帮助广大ICT从业者和客户快速熟悉华为数通系列产品&#xff0c;了解并掌握相关产品的操作和配置、提升对企业ICT网络的规划、建设、运维能力&#xff0c;从而帮助企业构建更高效&#xff0…

一个函数统一238个机器学习R包,这也太赞了吧

Caret 是一个试图标准化机器学习过程的一个包。Caret 对 R 中最常用的机器学习方法 (目前支持238个R包)提供了统一的接口。 进行数据预处理 实现机器学习方法流程化模型构建 通过参数组合和交叉验证评估模型的参数 选择最优模型 评估模型性能 一键满足各种掉包&#xff0c…

Linux开启coredump

在Linux系统中&#xff0c;C/C程序崩溃是常见的问题之一。Coredump是指当一个程序崩溃时&#xff0c;系统把程序运行时的内存数据以二进制文件的形式保存下来&#xff0c;以便程序开发者进行崩溃分析。本文将介绍如何开启并配置Coredump 1、查看并配置coredump 在Linux系统中…

基于微信小程序+SpringBoot+Vue的垃圾分类系统(带1w+文档)

基于微信小程序SpringBootVue的垃圾分类系统(带1w文档) 基于微信小程序SpringBootVue的垃圾分类系统(带1w文档) 本垃圾分类小程序也是紧跟科学技术的发展&#xff0c;运用当今一流的软件技术实现软件系统的开发&#xff0c;让环保方面的信息完全通过管理系统实现科学化&#xf…

不是演练 “毒云藤”再出击,知网用户成钓鱼攻击目标

亚信安全威胁情报中心近期在梳理安全事件时&#xff0c;发现一起钓鱼攻击活动。该起事件仿冒网易云邮箱进行钓鱼攻击&#xff0c;成功窃取到用户信息后将用户信息post到本地的”login.php”目录下保存&#xff0c;并跳转到正常网站。经分析&#xff0c;判断该行为符合绿斑APT组…

FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 课程上架/下架 1、是否登录 2、角色权限 3、课程是否存在 4、是否是自己的课程 4、课程如果是上架状态&#xff0c;则下架&#xff0c;反之&#xff…

【Python第三方库】PyQt5安装与应用

文章目录 引言安装PYQT5基于Pyqt5的简单桌面应用常用的方法与属性QtDesigner工具使用与集成窗口类型QWidget和QMainWindow区别 UI文件加载方式直接加载UI文件的方式显示窗口转化py文件进行显示窗口 PyQt5中常用的操作信号与槽的设置绑定页面跳转 引言 PyQt5是一个流行的Python…

AutoSar中的Spi_SetupEB函数原理与实现

文章目录 一、函数介绍二、项目背景三、函数在AUTOSAR官网中的介绍四、代码实现五、验证六、联调过程中遇到的问题 一、函数介绍 此函数是Autosar标准中的接口&#xff0c;为EB SPI处理器/驱动程序设置缓冲区和数据长度的服务 指定频道。用容易理解的话说就是 设置一下某个通道…

SpringBoot中使用监听器

1.定义一个事件 /*** 定义事件* author hrui* date 2024/7/25 12:46*/ public class CustomEvent extends ApplicationEvent {private String message;public CustomEvent(Object source, String message) {super(source);this.message message;}public String getMessage() …

uniapp手写滚动选择器

文章目录 效果展示HTML/Template部分&#xff1a;JavaScript部分&#xff1a;CSS部分&#xff1a;完整代码 没有符合项目要求的选择器 就手写了一个 效果展示 实现一个时间选择器的功能&#xff0c;可以选择小时和分钟&#xff1a; HTML/Template部分&#xff1a; <picker…

『 Linux 』信号概念与信号的产生 ( 万字 )

文章目录 信号概念前台进程与后台进程信号的本质硬件理解信号的产生Core dump 标志 信号概念 "信号"一词指用来传达信息或只是的各种形式的提示或标志; 在生活中常见的信号例如红绿灯,交通标志,短信通知等 在操作系统中,"信号"是一种用于异步通知进程发生特…

国衍科技——RFID技术的应用

在文物馆藏信息的记录与管理过程中&#xff0c;准确性和详细性是至关重要的。无论是大型博物馆还是私人收藏馆&#xff0c;都需要有效的方法来确保馆藏文物信息的可追溯性和可访问性&#xff0c;才能提供更好的服务和保护馆藏资源。而结合射频识别&#xff08;RFID&#xff09;…

2024年虚拟主机转移教程

转移网站并不困难&#xff0c;但选择正确的选项和最佳程序才是关键。网站托管服务被视为当今数字世界的基石&#xff0c;全球有18 亿个网站。网站所有者可以通过下载备份、将其上传到新服务器并指向域名来手动转移网站。他们还可以通过新网站托管商的助手请求来移动网站。对于初…

华清数据结构day5 24-7-22

1>使用栈&#xff0c;完成进制转换输入&#xff1a;一个整数&#xff0c;进制数输出&#xff1a;该数的对应的进制数 seqstack.h #ifndef SEQSTACK_H #define SEQSTACK_H #define MAX 10 #include"myhead.h" typedef int datatype;typedef struct {datatype *d…

【Tomcat】快速入门

概述 Tomcat是Apache软件基金会一个核心项目&#xff0c;是一个开源免费的轻量级Web服务器&#xff0c;支持Servlet/JSP.少量avaEE规范。Tomcat Tomcat也被称为Web容器、Servlet容器。Servleti程序需要依赖于Tomcat才能运行。 安装使用 下载安装都是绿色版本&#xff0c;解…

Git、Gitlab以及分支管理

分布式版本控制系统 一、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更。它由Linus torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git 允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行协作。 Githu…

全年销售7亿块,巧克力企业如何通过相邻业务打造极致产品力?

蒂罗尔巧克力是日本经典的巧克力品牌。 糖果业务是松尾早期的主营业务&#xff0c;在主营业务下滑的情况下&#xff0c;确立新的竞争方向&#xff0c;通过主营业务优势进入相邻业务&#xff0c;打造新产品成就巧克力极致产品力&#xff0c;避免衰退重回增长。 如何通过进入相邻…

MFC列表框示例

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.示例内容 2.程序步骤 3.运行结果 4.代码全文 1.示例内容 编写一个对话框应用程序CMFC_Li6_4_学生信息Dlg&#xff0c;对话框中有一个列表框&#xff0c;当用户…

matlab gui下的tcp client客户端编程框架

GUI界面 函数外定义全局变量 %全局变量 global TcpClient; %matlab作为tcpip客户端 建立连接 在“连接”按钮的回调函数下添加以下代码&#xff1a; global TcpClient;%全局变量 TcpClient tcpip(‘192.168.1.10’, 7, ‘NetworkRole’,‘client’); %连接到服务器地址和端…