【蓝桥杯】【字符排序】
来源:互联网 发布:济南java工资线 编辑:程序博客网 时间:2024/05/17 21:56
【题目】
算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。
如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。
【分析】
求全排列是很常见的题目类型,在找所有可能性的时候,我们用到了交换的思想:a[0]和后面所有的元素交换位置,是一种不同的排列,应用上递归的思想,后面的子数组也是用相同的交换去找出不同的排列。
但是要注意去除重复的排列。
【源码】
private static char[] a; private static TreeSet<String> resultSet; //帮助排序,帮助去重 public static void main(String[] args) { String s = "abcd"; a = s.toCharArray(); resultSet = new TreeSet<String>(); f(0); for (String s1 : resultSet) { System.out.println(s1); } System.out.println(resultSet.size()); } private static void f(int index){ if(index == a.length-1){ return; } for(int i=index; i<a.length; i++){ { char temp = a[i]; a[i] = a[index]; a[index] = temp; } //新的排列产生 resultSet.add(Arrays.toString(a)); f(index+1); { //回溯 char temp = a[i]; a[i] = a[index]; a[index] = temp; } } }
【结果】
[A, B, C]
[A, C, B]
[B, A, C]
[B, C, A]
[C, A, B]
[C, B, A]
6
阅读全文
0 0
- 【蓝桥杯】【字符排序】
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 字符排序
- 冒泡排序,排序字符
- JAVA蓝桥杯(1)字符排序
- C#自定义类型
- 聊聊搜索框设计的7个技巧
- C++ 问题集锦
- windows 下命令给RabbitMQ用户赋管理角色
- Android OpenGL教程-第五课【转】
- 【蓝桥杯】【字符排序】
- 重新做人,记录人生
- 设计新手最常见的4个问题
- [Unity][LUA][SLUA]选择LUA库导入Unity中
- 简易手风琴
- Pyinstaller打包matplotlib error总结
- 浅谈移动端的自适应问题——响应式、rem/em、利用Js动态实现移动端自适应
- 【web前端开发】浏览器兼容性处理大全
- 车牌识别api接口—移动端安卓、iOS系统的OCR技术