排列算法实现
来源:互联网 发布:末代沙皇的公主们 知乎 编辑:程序博客网 时间:2024/06/07 03:06
思想:永远取第一个元素去依次插入“剩于元素的排列”的任意位置
public class Arith{ public static void main(String[] args) { char[] chars = new char[] { 'a', 'b', 'c', 'd' }; Collection<char[]> coll = permutation(chars); for (char[] one : coll) { System.out.print(String.valueOf(one) + ","); } System.out.println(); System.out.println("size : " + coll.size()); // 结果为chars.size()的阶乘 } /** * 获得字符的全排列 * @param chars 字符集 * @return 全排列 */ static Collection<char[]> permutation(char[] chars) { Collection<char[]> coll = new HashSet<char[]>(); recursive(chars, coll); return coll; } private static void recursive(char[] chars, Collection<char[]> coll) { char[] rest = null; // 最后一个元素 if (chars.length == 1) { rest = new char[1]; rest[0] = chars[0]; coll.add(rest); return; } // 1. 取第一个元素 char ch = chars[0]; char[] child = new char[chars.length - 1]; // 2. 剩下的元素 System.arraycopy(chars, 1, child, 0, chars.length - 1); Collection<char[]> childColl = new HashSet<char[]>(); // 3. 剩下元素的全排列 recursive(child, childColl); // 4. 插入“剩于元素的排列”的任意位置 for (char[] one : childColl) { for (int i = 0; i < chars.length; i++) { rest = new char[chars.length]; rest[i] = ch; for (int j = 0; j < one.length; j++) { if (j < i) { rest[j] = one[j]; } else if (j >= i) { rest[j + 1] = one[j]; } } coll.add(rest); } } }}
- 全排列算法实现
- 排列算法实现
- 排列算法实现
- 排列算法 C++实现
- 全排列算法(Java实现)
- 排列生成算法实现java
- 全排列算法及实现
- 递归算法实现全排列
- 全排列算法【java实现】
- 全排列算法递归实现
- 全排列算法及实现
- 【算法】递归实现全排列
- 全排列算法及实现
- 全排列算法c++实现
- 全排列算法c++实现
- 全排列算法的实现
- 字符串排列算法的实现
- 全排列算法的实现
- 机器学习那些事
- ssh:connect to host 192.168.1.134 port 22:Connection refused lost connection
- Android之edittext数字输入法~
- PHP购物车功能
- [Windows8 App 隐私策略]简易趣味食指灵敏度测试
- 排列算法实现
- fabric学习笔记
- -Geo-Picture
- Windows语音初步编程初步(ZZ)
- lsb_release -a 查询系统版本
- ExpandEnvironmentStrings 函数
- 《Linux内核编程》第六章:Linux设备驱动中的并发控制
- Fragment:小Activity(带自己Layout的Activity片段)----可被Activity复用,自己生命周期
- 使用OpenOffice .org(Portable)将WORD转换为PDF