字符串的排列

字符串排列(全排列) 题目描述 编写一个方法,确定某字符串的所有排列组合。 给定一个stringA和一个intn,代表字符串和其长度,请返回所有该字符串字符的排列,保证字符串长度小于等于11且字符串中字符均为大写英文字符,排列中的字符串按字典序从大到小排序。(不合并重复字符串) 测试样例: "ABC" 返回:["CBA","CAB","BCA","BAC","ACB","ABC"] Solution... 阅读详情
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。

我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们在拿c和第一个字符交换之前,先要把b和a交换回来。在交换b和a之后,再拿c和处在第一位置的a进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a的排列。

既然我们已经知道怎么求三个字符的排列,那么固定第一个字符之后求后面两个字符的排列,就是典型的递归思路了。

 

public class Test_28 {
	public static void main(String[] args){
		StringBuilder str =new StringBuilder("abc");
		p(str,0);
	}
	public static void p(StringBuilder str,int index){
		if(str == null||index<0){
			return;
		}
		if(index == str.length()-1){
			System.out.println(str);
		}
		else 
		{
			for(int i = index; i<str.length();i++){
				//交换第一个字符和str.charat(i)
				char temp = str.charAt(i);
				str.setCharAt(i, str.charAt(index));
				str.setCharAt(index, temp);
				
				//递归求该字符后的字符串的全排列
				p(str,index+1);
				//再次交换第一个字符和str.charat(i)
			    temp = str.charAt(i);
				str.setCharAt(i, str.charAt(index));
				str.setCharAt(index, temp);
			}
		}
	}
	
}

输出结果:

abc
acb
bac
bca
cba
cab

使用Bigemap下载地图流程 Bigemap地图下载简单流程,临时安排任务简单学习没有深入了解。 阅读详情

相关推荐

手把手教你逆向抖店滑块验证码:从抓包到生成captchaBody的完整流程(附Python复现代码)

本文详细解析了抖店滑块验证码的逆向过程,从抓包分析到参数生成,最终用Python完整复现验证流程。涵盖关键接口分析、指纹参数生成、轨迹加密逻辑及核心加密算法实现,帮助开发者突破抖店的多重安全机制,实现高效的人机验证绕过。

weixin_30681121的博客 426

转载 字符串的排列

转载:http://zhedahht.blog.163.com/blog/static/254111742007499363479/ 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试

Blog of Tom Chao Zhou 539

声音编程(Voice Coding) Talon(一) 基本介绍与安装使用

语音编程平台简介 语音编程工具有哪些:Talon是一款声音编程平台,它追求的意义在于完全取代键盘和鼠标。。当前,全球有两个领先的语音编程平台(Programming-By-Speech Platforms)。一是Serenade,它的作用有点像数字助手,可以让你描述正在编程的命令,而不要求你必须逐字逐句地口述每条指令。另一个就是Talon,它提供了对每一行代码更精细的控制,这也意味着你需要对每一个被编入机器的任务有更细致的把握。具体的差别可以参考文章末尾的Serenade 和 Talon编程的例子。 除了这

yinglang19941010的专栏 4139

字符串比较

字符串相等的条件: 1、不区分大小写 2、不区分顺序 比如“aBc”=“ABC” “abc”=“bac” 要求:要有自己的算法思想。 ====== 一个方法: 1、先把两个字符串都转化为大写或小写 2、把字符串转化为char数组,然后使用冒泡或比较或其他排序算法实现排序 3、使用equals来判断排序后的连个字符串是否相等 这个方法可行,但是没有体现出做题人自己的

期待 817

FC游戏Hack实战:从零开始修改游戏数据

本文以《忍者神龟3》为例,详细介绍了从零开始进行FC游戏Hack的完整实战流程。通过使用FCEUX模拟器和调试器,结合“递减法”精准定位生命值内存地址,并利用十六进制编辑器修改关键指令,最终实现“无限生命”效果。文章旨在引导读者理解游戏数据修改的核心原理与操作技巧,重温经典的同时深入计算机程序运行机制。

weixin_28366353的博客 358

保姆级教程:用Wireshark抓包分析10M汽车以太网PLCA轮询机制(附pcap文件)

本文详细介绍了10M汽车以太网PLCA轮询机制的抓包分析与性能优化方法。通过Wireshark实战教程,解析PLCA协议的时分多址特性、总线型拓扑结构及带宽优化策略,帮助工程师提升车内网络的可靠性和实时性。附赠pcap文件供实践参考。

wdx01234567的博客 240

判断两个字符串是否相等(换位字符串)

package com.sort; //判断两个字符串是否相等(换位字符串) /* * 字符串相等的条件: 1、不区分大小写 2、不区分顺序 比如“aBc”=“ABC” “abc”=“bac” * * */ public class String3 { // 字符转换成数字,相当于hashCode public static int[] getIntArray(String

zjcheer_up的专栏 1628

tmux + Claude Code 远程开发指南:从 WSL 配置到断线无忧

远程开发中,SSH 连接中断常导致后台任务丢失,这是困扰开发者的经典难题。tmux 作为终端复用器,通过将进程挂在常驻会话中,使其脱离 SSH 连接独立运行,从根本上解决了断线导致的任务终止问题。Claude Code 等 AI 编程代理需要长时间运行并保持交互上下文,恰好依赖这种会话持久化能力。结合 Windows Subsystem for Linux 提供类 Unix 环境,开发者可在 Windows 上实现稳定的远程开发工作流。本文将完整介绍从 WSL 环境配置、tmux 会话管理,到与 Claud

weixin_30423065的博客 348

字符串的全排列问题

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 方法一: 注意点:   第一个是重复字母,第二个是按字典顺序。   重复字母我们在进行交换的时候直接跳过就可以了

xieliang0717的博客 437

cmu15445 2023fall project4 详细过程(包括Bonus Tasks) Concurrency Control

CMU15-445 23fall project 4详解

LA的博客 1606

uniapp [安卓苹果App端] - errMsg“: “request:fail abort statusCode:-1 不支持的URL(-1002)Uniapp真机运行APP网络请求报错失败排查

uniapp真机运行APP,网络请求报错errMsg“: “request:fail abort statusCode:-1 不支持的URL(-1002),uni.request网路请求报错,uniApp解决请求接口报错,uniapp app端打包上线后请求报错,真机运行测试请求失败,uniapp安卓app请求报错,uniapp苹果ios平台网络请求报错,uniapp真机预览请求失败怎么办,不是跨域问题,在H5中请求可以正常发送和接收,但在真机APP上请求报错,Hbuilder真机运行app网络请求报错,全

🏆 前端领域优质创作者 3090

字符串的全排列

题目描述 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串 abc、acb、bac、bca、cab 和 cba。 分析与解法 解法一、递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例 固定...

qq_43324779的博客 5115

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

字符串全排列

为题描述:输入一个字符串,输出该字符串所有可能的排列方式(全排列); 问题解析:字符串全排列问题算是一种找规律的问题,若果我们能找到生成第一个字符排列的方法,那么参考这个方法就可以依次生成其余的字符串排列,不过得强调一点,找到的这个方法必须得满足正确性、互异性和完整性,否则就不能称得上是全排列了。按照每个人的不同思维习惯,字符串全排列的生成方法应该是多样的,有的人喜欢从后往前生成新的排列,有的人偏爱

xydian的博客 5296

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python输入字符串从大到小排列_Python字符串的排列

依次取一个元素,然后依次和之前递归形成的所有子串组合,形成新的字符串。'''输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。结果请按字母顺序输出。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。'''# -*- coding:utf-8 -*...

weixin_39729840的博客 3260

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

全排列c++代码_字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路及代码这个题目可以简单地抽象为求一个字符串的全排列。那全排列通过什么方法可以较好的求出来呢?我们可以采用递归的方法不断固定某...

weixin_39622419的博客 996

【剑指offer】字符串的排列

昨晚折腾了一个晚上,连这一道题目都没AC,太受打击了!这里倒不是算法的问题,主要是既要考虑输出的字符串按字典序排列,又要去掉重复的字符串。本想直接在不保存所有字符串的前提下,直接按照要求输出字符串,但折腾了一晚上,还是决定放弃了,依然是使用最直接的方法,以空间换取结果,将所有的字符串保存到一个字符串数组中,由于全排列后的字符串数最大为9!=362880,故开辟一个362900大的字符串数组用来保存这些字符串,而后对这些字符串进行排序,先用了选择排序,通过strcpy字符串进行排序,结果争取,但第三组测试用例

兰亭风雨的专栏 4505

字符串排列 java_Java字符串之字符串的全排列

题目描述输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串abc、acb、bac、bca、cab 和 cba。分析与解法解法一、递归实现从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以abc为例固定a,求后面bc...

weixin_30237677的博客 487

38.【全排列】字符串的排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 思路 回溯法,具体见代码注释 代码实现 package com.wumeng.E; import jav...

积累 沉淀 博学 广思 432

JavaScript字符串的排列

1. 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc,则打印出由字符 a,b,c 所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba。 输入描述:输入一个字符串,长度不超过 9(可能有字符重复),字符只包括大小写字母。 2. 解题思路 把集合看成 2 个部分,第一部分是第一个元素,第二部分是后面剩余元素。所有字符都要与当前集合...

web前端开发学习教程 955
上一篇: 求二元树的深度
下一篇: 调整数组顺序使奇数位于偶数前面
tanyujing
博客等级 码龄18年 135粉丝 91原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值