当前位置:网站首页>全排列思路详解
全排列思路详解
2022-08-10 23:55:00 【牛牛最爱喝兽奶】
详解全排列
分析
在这里提到的全排列,和高中数学里遇到的全排列几乎是一个概念。主要应用于选择、求解概率事件的时候会用到全排列。
也就是说我们可以从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
公式: 全排列数f(n)=n!(定义0!=1)
简介
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
公式:全排列数f(n)=n!(定义0!=1),如1,2,3三个元素的全排列为:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
共321=6种。
代码分析
针对于字符串"ABC",理论上我们得到的结果应该是"ABC ACB CBA CAB BAC BCA",6种情况。
其实我们可以简单理解为生活中的老大、老二、老三这样情况,每一次轮流一个字符出来承担老大的职责,接着老二,最后在老三,这样每一轮就会得到一种排列顺序。最后避免有重复的字符串存在,我们可以采用set集合的方式来接收;
代码如下:
public static void quanpailie(char[] arr, int from, int to, Set<String> set){
if(from>=to){
set.add(new String(arr));
return;
}
for(int i=from;i<=to;i++){
swap(arr,i,from);//轮流当老大
quanpailie(arr,from+1,to,set);//轮到下一个选老二 老三
swap(arr,i,from);//还原 回溯
}
}
private static void swap(char[] arr, int i, int from) {
char c = arr[i];
arr[i] = arr[from];
arr[from] = c;
}
public static void main(String[] args) {
Set<String> set = new HashSet<>();
quanpailie("ABC".toCharArray(),0,2,set);
System.out.println(set.toString());
}
结果
边栏推荐
- 缓存知识总结
- C language% (%d,%c...)
- YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
- Summary of Confused Knowledge Points for "High Items" in the Soft Examination in the Second Half of 2022 (2)
- C语言%(%d,%c...)
- Design and Realization of Employment Management System in Colleges and Universities
- Where can I download IEEE papers?
- SQL注入基础
- What is the ASIO4ALL
- 9. Rest style request processing
猜你喜欢
有哪些可以投稿软件工程/系统软件/程序设计语言类外文期刊、会议?
Jvm.分析工具(jconsole,jvisualvm,arthas,jprofiler,mat)
11. 自定义转换器
excel英文自动翻译成中文教程
SAS data processing technology (1)
[Excel知识技能] 将数值格式数字转换为文本格式
[C language] Detailed explanation of data storage
App regression testing, what are the efficient testing methods?
ADC和DAC记录
How to recover data from accidentally deleted U disk, how to recover deleted data from U disk
随机推荐
UOJ#749-[UNR #6]稳健型选手【贪心,分治,主席树】
11. Custom Converter
YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
"NIO Cup" 2022 Nioke Summer Multi-School Training Camp 4 ADHK Problem Solving
How engineers treat open source
[C language] Implementation of guessing number game
SQL injection base
服务器小常识
如何利用原生JS实现回到顶部以及吸顶效果
开启新征程——枫叶先生第一篇博客
9. Rest 风格请求处理
编程语言为什么有变量类型这个概念?
HGAME 2022 Week1 writeup
The Missing Semester of Your CS Education
“蔚来杯“2022牛客暑期多校训练营4 ADHK题解
Pagoda Test-Building PHP Online Mock Exam System
How to quickly grasp industry opportunities and introduce new ones more efficiently is an important proposition
“蔚来杯“2022牛客暑期多校训练营2 DGHJKL题解
Starting a new journey - Mr. Maple Leaf's first blog
定时器,同步API和异步API,文件系统模块,文件流