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

递归--打印一个字符串的全部排列(java)

打印一个字符串的全部排列

  • 打印一个字符串的全部排列
  • 解题思路
  • 打印一个字符串的全部排列,要求不要出现重复的排列
  • 递归专题

打印一个字符串的全部排列

自负串全排序:
举例:
abc 的全排序是:
abc
acb
bac
bca
cba
cab

解题思路

因为每个字符都要选,其实就是选择每个字符的顺序,那我们递归时,就可以把不同顺序一直递归下去.

代码演示

    /*** 字符串的全排列* @param str* @return*/public static List<String> allSubSequence(String str){if (str == null || str.equals("")){return null;}//保存答案ArrayList<String> ans = new ArrayList<>();process(str.toCharArray(),0,ans);return ans;}/*** 递归* @param str 字符串数组* @param index  下标值* @param ans 保存答案*/public static void process(char[]str, int index, List<String> ans){//base caseif (index == str.length){ans.add(String.valueOf(str));}else{for (int i = index;i < str.length;i++){//因为每个字符都要选,我们只是选择顺序,因此交换下顺序,swap(str,i, index);//然后递归process(str,index + 1,ans);//要把交换过的顺序 恢复回去,这样才能保证递归出全部顺序.swap(str,i,index);}}}

打印一个字符串的全部排列,要求不要出现重复的排列

解题思路:
我们可以按上面的代码去做,只需要用HashSet 去保存答案,就会去重了,但这样并没有优化效率,在递归时去掉可能会重复的值,这样才能把效率优化下来,
怎样优化呢:
两个相同的字符,如果已经有一个出现过在某个位置,那么剩下相同的字符也不用重复交换了,这样会提高效率
根据上面的思路,我们只需要加个判断,
因为字符转换成数字的值在0-255 ,因此用长度256 的数组就可以标记了,代码演示,

代码演示,

    /*** 打印一个字符串的全部排列,要求不要出现重复的排列* @param str* @return*/public static List<String> allSubSequence2(String str){if (str == null || str.equals("")){return null;}ArrayList<String> ans = new ArrayList<>();process2(str.toCharArray(),0,ans);return ans;}/*** 递归* @param str* @param index* @param ans*/public static void process2(char[]str, int index, List<String> ans){if (index == str.length){ans.add(String.valueOf(str));}else{//标记相同的字符是否交换过,boolean[] flag = new boolean[256];for (int i = index;i < str.length;i++){if (!flag[str[i]]){flag[str[i]] = true;swap(str,i, index);process(str,index + 1,ans);swap(str,i,index);}}}}

递归专题

递归–字符串的全部子序列和不重复的子序列(java)

递归–汉诺塔问题(java)

相关文章:

递归--打印一个字符串的全部排列(java)

打印一个字符串的全部排列 打印一个字符串的全部排列解题思路打印一个字符串的全部排列&#xff0c;要求不要出现重复的排列递归专题 打印一个字符串的全部排列 自负串全排序: 举例: abc 的全排序是: abc acb bac bca cba cab 解题思路 因为每个字符都要选,其实就是选择每个字符…...

【001 设备驱动】主设备号和次设备号的用途

一、请简述主设备号和次设备号的用途 Linux 中每个设备都有一个设备号&#xff0c;设备号由主设备号和次设备号两部分组成&#xff0c;主设备号表示某一个具体的驱动&#xff0c;次设备号表示使用这个驱动的各个设备。 Linux 提供了一个名为 dev_t 的数据类型表示设备号&…...

移动端PDF在线预览

苹果手机可以直接在线预览PDF文件&#xff0c;而安卓手机不行&#xff0c;必须得下载(如图)&#xff0c;所以需要解决一下 1.准备所需js文件 &#xff08;1&#xff09;js下载地址https://mozilla.github.io/pdf.js/ &#xff08;2&#xff09;下载步骤 ①:打开网址后&#x…...

虚拟机两次寻址

一次寻址&#xff1a; 虚拟、逻辑地址&#xff1a;CS&#xff08;段选择子&#xff09; eip&#xff08;段内偏移&#xff09;> 线性地址 &#xff1a; 32位或64位 通过页表> 物理地址 x86: 页面大小4k pte4个字节 10-10-12 &#xff08;不管是x86 x86PAE x64下页内偏…...

DRF之JWT认证

一、JWT认证 在用户注册或登录后&#xff0c;我们想记录用户的登录状态&#xff0c;或者为用户创建身份认证的凭证。我们不再使用Session认证机制&#xff0c;而使用Json Web Token&#xff08;本质就是token&#xff09;认证机制。 Json web token (JWT), 是为了在网络应用环…...

华为OD机试真题 Java 实现【放苹果】【2022Q4 100分】

一、题目描述 把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 注意:如果有7个苹果和3个盘子,(5,1,1)和(1,5,1)被视为是同一种分法。 数据范围:0≤m≤10 ,1≤n≤10 。 二、输入描述 输入两个int整数。 三、输出描述 输…...

拼多多继续ALL IN

2023年注定是中国电商不平凡的一年。 随着网购用户数量见顶&#xff0c;经济形势进入新常态&#xff0c;电商平台已经来到了短兵相接的肉搏战阶段。 此刻的618大促&#xff0c;硝烟弥漫&#xff0c;刀光剑影&#xff0c;电商“决战”似乎是迫在眉睫。对各个平台来说&#xff0c…...

Unity的IPostprocessBuildWithReport:深入解析与实用案例

Unity IPostprocessBuildWithReport Unity IPostprocessBuildWithReport是Unity引擎中的一个非常有用的功能&#xff0c;它可以让开发者在构建项目后自动执行一些操作&#xff0c;并且可以获取构建报告。这个功能可以帮助开发提高工作效率&#xff0c;减少手动操作的时间和错误…...

九、Spring Cloud—gateway网关

一、引言 每个微服务都需和前端进行通信&#xff0c;解决每个微服务请求时的鉴权、限流、权限校验、跨域等逻辑&#xff0c;放在一个统一的地方进行使用。 在微服务架构中&#xff0c;网关是一个重要的组件&#xff0c;它作为系统的入口&#xff0c;负责接收所有的客户端请求…...

ARM微架构与程序编写

目录 1.流水线 2.指令流水线 3. 多核处理器​编辑 4. 工程搭建 4.1为Keil软件配置编译工具链 5.程序编写 5.1 数据处理指令 5.2 带标志位的加法ADC ADDS 5.3 跳转指令B\BL 5.4 单寄存器内存访问 5.5 批量寄存器内存访问 5.6 栈的应用->叶子函数的调用过程 5.…...

Windows下利用Anaconda创建多个CUDA环境

参考 https://blog.csdn.net/qq_42395917/article/details/126237388 https://blog.csdn.net/qq_42406643/article/details/109545766 (待学习补充) https://blog.csdn.net/qq_43919533/article/details/125694437 (待学习补充) 安装cudatoolkit和cudnn # 前提是我已经安装了…...

C SS复习笔记

1.img标签 img的src属性是图片显示不出来时显示的文字 ing的title属性是光标放到图片上&#xff0c;提示的文字 2.a标签 a标签的target属性表示打开窗口的方式&#xff0c;默认的值是_self表示当前窗口的打开页面&#xff0c;_blank表示新窗口打开页面。 a标签的href链接分…...

LeetCode 225 用队列实现栈

题目&#xff1a; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回…...

Java对象的共享

要编写正确的并发程序&#xff0c;关键问题在于&#xff1a;在访问共享的可变状态时需要进行正确的管理。第2章介绍了如何通过同步来避免多个线程在同一时刻访问相同的数据&#xff0c;而本章将介绍如何共享和发布对象&#xff0c;从而使它们能够安全地由多个线程同时访问。这两…...

漏洞概述-0day漏洞利用原理(0)

0day专题对作者来说是一个很大的挑战,但无论有多难,作者会坚持进行大量的对新旧技术(精通二进制、汇编语言、操作系统底层的知识)实践并尽可能做到完善,最终利用技术发扬正能量。 bug 与漏洞 随着现代软件工业的发展,软件规模不断扩大,软件内部的逻辑也变得异常复杂。为…...

交换机的4种网络结构方式:级联方式、堆叠方式、端口聚合方式、分层方式

交换机是计算机网络中重要的网络设备之一&#xff0c;用于实现局域网&#xff08;LAN&#xff09;内部的数据转发和通信。交换机可以采用不同的网络结构方式来满足不同的网络需求和拓扑结构。本文将详细介绍交换机的四种网络结构方式&#xff1a;级联方式、堆叠方式、端口聚合方…...

firewall-cmd防火墙策略

--permanent 永久生效&#xff0c;重启后规则不消失 不执行 firewall-cmd --reload 命令配置不生效 添加单个IP为白名单 firewall-cmd --permanent --zonepublic -add-rich-rulerule family"ipv4" source address"IP" accept 删除白名单 firewall-cmd --…...

解决SQLException: Incorrect string value异常

java开发中会遇到如下异常&#xff1a; org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: java.sql.SQLException: Incorrect string value: \xF0\x9F\x95\xB32:... for column baseInfo at row 1 ### The error may involve com.f…...

桂院校园导航 导入 与 配置教程

将 静态项目/云开发项目 文件夹下最新版本的 文件夹下的 项目 的整个文件夹 复制到项目路径下&#xff08;比如 D:\WeChatProjects&#xff09;&#xff0c;强烈建议不要直接扔在桌面上 云开发项目 需开通 云开发 功能&#xff08;首月免费&#xff0c;次月19.9&#xff09;&am…...

Linux上安装jdk Tomcat mysql redis

1.安装JDk 1.1这里使用xshell中xfxp进行文件的上传&#xff0c;将jdk二进制包上传到Linux服务器上 下载地址&#xff1a;Java Downloads | Oracle 或者这里有下载好的安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1ZSJxBDzDaTwCH2IG-d2Gig 提取码&#xff1a;…...

如何用bsf创建第一个3D场景:从零开始的完整教程

如何用bsf创建第一个3D场景&#xff1a;从零开始的完整教程 【免费下载链接】B3DFramework Modern C library for the development of real-time graphical applications 项目地址: https://gitcode.com/gh_mirrors/bs/B3DFramework bsf&#xff08;B3DFramework&#x…...

3分钟告别Windows桌面混乱:这款免费工具让你的图标瞬间变整齐

3分钟告别Windows桌面混乱&#xff1a;这款免费工具让你的图标瞬间变整齐 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上那些杂乱无章的图标头疼吗&…...

uTinyRipper零基础实战:Unity游戏资产提取与反序列化指南

1. 这不是“破解工具”&#xff0c;而是一把Unity游戏资产的“数字考古铲” 你刚下载完一款国产独立游戏&#xff0c;想看看它的UI贴图是怎么做的&#xff1b;或者在学习Unity Shader时&#xff0c;想拆解某款商业Demo里那个流光溢散的粒子特效&#xff1b;又或者&#xff0c;你…...

MASA模组汉化包技术解析:构建高效中文游戏体验的技术解决方案

MASA模组汉化包技术解析&#xff1a;构建高效中文游戏体验的技术解决方案 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 在Minecraft模组生态系统中&#xff0c;MASA系列模组以其强大的…...

iOS系统更新策略解析:从安全补丁到版本选择,如何理性应对系统升级

1. 从iOS 17.6.1看苹果的系统更新策略&#xff1a;一次“小修小补”背后的深意最近关于iOS 18和iOS 18.1的讨论铺天盖地&#xff0c;各种AI功能、界面大改的传闻让人眼花缭乱。但如果你像我一样&#xff0c;日常接触大量不同型号的iPhone用户&#xff0c;就会发现一个有趣的现象…...

论文重复率过高,应该怎么办?

重复率过高&#xff0c;先别急着全文重写。大多数情况&#xff0c;不是整篇都有问题&#xff0c;而是少数几个章节把总重复率拉爆了。很多人第一反应是“从头改到尾”。这个最累&#xff0c;而且效率最低。正确顺序是这样的。第一步&#xff1a;先看是哪一部分高&#xff0c;不…...

医用超声图像干扰处理方法:原理、技术与实践

引言 超声成像作为一种无创、实时、无辐射的医学影像技术,在临床诊断中发挥着至关重要的作用。然而,超声图像在采集过程中极易受到各种物理和电子干扰,导致图像质量下降,影响医生的诊断准确性。常见的干扰包括斑点噪声、混响伪影、声影、镜面伪影以及由患者呼吸、运动引起…...

保姆级教程:在Ubuntu 22.04上从源码编译RISC-V SPIKE模拟器(含libboost报错解决)

从零构建RISC-V开发环境&#xff1a;Ubuntu 22.04下SPIKE模拟器深度编译指南 当第一次接触RISC-V生态时&#xff0c;搭建可靠的开发环境往往成为新手面临的第一个挑战。作为RISC-V官方推荐的指令集模拟器&#xff0c;SPIKE以其轻量级和准确性成为学习RISC-V架构的理想工具。本文…...

别再让照片发黄发蓝了!手把手教你用Python+OpenCV实现AWB白平衡(附完整代码)

PythonOpenCV实战&#xff1a;5种白平衡算法让你的照片告别色偏 你是否遇到过这样的困扰&#xff1f;在暖光灯下拍摄的美食照片泛黄&#xff0c;阴天拍摄的风景照泛蓝&#xff0c;这些色偏问题让照片失去真实感。作为计算机视觉领域的基石技术&#xff0c;白平衡算法正是解决这…...

探索AI图像智能标注新范式:ComfyUI JoyCaptionAlpha Two插件深度指南

探索AI图像智能标注新范式&#xff1a;ComfyUI JoyCaptionAlpha Two插件深度指南 【免费下载链接】ComfyUI_SLK_joy_caption_two ComfyUI Node 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_SLK_joy_caption_two 在AI图像生成与内容创作领域&#xff0c;手动为…...