- 浏览: 465852 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
simpleDean 写道请问,Logger.setLevel ...
Java内置Logger详解 -
sunwang810812:
我运行了这个例子,怎么结果是这样的:2号车泊车6号车泊车5号车 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
jp260715007:
nanjiwubing123 写道参考你的用法,用如下方式实现 ...
面试题--三个线程循环打印ABC10次的几种解决方法 -
cb_0312:
SurnameDictionary文章我没看完,现在懂了
中文排序
给定一组对象,要求给出这些对象数据的全排列。 例子: 对象数据{A}, 全排列 [A] 对象数据 {A,B} 全排列 [AB] [BA] 对象数据 {A,B,C}全排列 [ABC][ACB][BAC][BCA][CAB][CBA] ... 依此类推 根据对象数据的个数,得到的全排列个数为 Num = N! (N为对象数据的个数)本例子采用递归方式来实现。本例子中没有考虑当出现相同数据时,产生相同的组合,如果需要保持每个组合的唯一性,可以将得到的组合放置到一个结果List中,然后通过contains(Object o)方法判断需要不需要加入到结果链表中就好了
代码:
输出结果情况
一个元素:
第1个:A
两个元素:
第1个:AB
第2个:BA
三个元素:
第1个:ABC
第2个:ACB
第3个:BAC
第4个:BCA
第5个:CAB
第6个:CBA
五个元素:
第1个:ABCDE
第2个:ABCED
第3个:ABDCE
第4个:ABDEC
第5个:ABECD
第6个:ABEDC
第7个:ACBDE
第8个:ACBED
第9个:ACDBE
第10个:ACDEB
第11个:ACEBD
第12个:ACEDB
第13个:ADBCE
第14个:ADBEC
第15个:ADCBE
第16个:ADCEB
第17个:ADEBC
第18个:ADECB
第19个:AEBCD
第20个:AEBDC
第21个:AECBD
第22个:AECDB
第23个:AEDBC
第24个:AEDCB
第25个:BACDE
第26个:BACED
第27个:BADCE
第28个:BADEC
第29个:BAECD
第30个:BAEDC
第31个:BCADE
第32个:BCAED
第33个:BCDAE
第34个:BCDEA
第35个:BCEAD
第36个:BCEDA
第37个:BDACE
第38个:BDAEC
第39个:BDCAE
第40个:BDCEA
第41个:BDEAC
第42个:BDECA
第43个:BEACD
第44个:BEADC
第45个:BECAD
第46个:BECDA
第47个:BEDAC
第48个:BEDCA
第49个:CABDE
第50个:CABED
第51个:CADBE
第52个:CADEB
第53个:CAEBD
第54个:CAEDB
第55个:CBADE
第56个:CBAED
第57个:CBDAE
第58个:CBDEA
第59个:CBEAD
第60个:CBEDA
第61个:CDABE
第62个:CDAEB
第63个:CDBAE
第64个:CDBEA
第65个:CDEAB
第66个:CDEBA
第67个:CEABD
第68个:CEADB
第69个:CEBAD
第70个:CEBDA
第71个:CEDAB
第72个:CEDBA
第73个:DABCE
第74个:DABEC
第75个:DACBE
第76个:DACEB
第77个:DAEBC
第78个:DAECB
第79个:DBACE
第80个:DBAEC
第81个:DBCAE
第82个:DBCEA
第83个:DBEAC
第84个:DBECA
第85个:DCABE
第86个:DCAEB
第87个:DCBAE
第88个:DCBEA
第89个:DCEAB
第90个:DCEBA
第91个:DEABC
第92个:DEACB
第93个:DEBAC
第94个:DEBCA
第95个:DECAB
第96个:DECBA
第97个:EABCD
第98个:EABDC
第99个:EACBD
第100个:EACDB
第101个:EADBC
第102个:EADCB
第103个:EBACD
第104个:EBADC
第105个:EBCAD
第106个:EBCDA
第107个:EBDAC
第108个:EBDCA
第109个:ECABD
第110个:ECADB
第111个:ECBAD
第112个:ECBDA
第113个:ECDAB
第114个:ECDBA
第115个:EDABC
第116个:EDACB
第117个:EDBAC
第118个:EDBCA
第119个:EDCAB
第120个:EDCBA
代码:
import java.util.ArrayList; import java.util.List; /** * 题目: 给定一组对象,要求给出这些对象数据的全排列。 例子: 对象数据{A}, 全排列 [A] 对象数据 {A,B} 全排列 [AB] [BA] 对象数据 * {A,B,C}全排列 [ABC][ACB][BAC][BCA][CAB][CBA] ... 依此类推 根据对象数据的个数, 得到的全排列个数为 Num = * N! (N为对象数据的个数) * * 本例子采用递归方式来实现。 * 本例子中没有考虑当出现相同数据时,产生相同的组合, * 如果需要保持每个组合的唯一性,可以将得到的组合放置到一个结果List中, * 然后通过contains(Object o)方法判断需要不需要加入到结果链表中就好了 * * @author Eric Wang * @version 1.0 * */ public class Permutation { private static final String EMPTY = ""; // 通过列表来存放样本数据 private static List<String> sampleData = new ArrayList<String>(); static { // 初始化sampleData的值 sampleData.add("A"); sampleData.add("B"); sampleData.add("C"); sampleData.add("D"); sampleData.add("E"); } //统计个数 private int currentCount = 1; /** * * @param remainingData : * 剩余的需要递归的数据 * @param currentData : * 目前得到的数据 */ public void getPermutation(List<String> remainingData, String currentData) { if (null == remainingData) { return;// 如果没有数据则直接返回,什么也不做 } // 剩余的情况都是链表不为空的时候产生的 if (1 == remainingData.size() || 2 == remainingData.size()) { printPermutation(remainingData, currentData); } else { for (int currentIndex = 0; currentIndex < remainingData.size(); currentIndex++) { List<String> tempList = new ArrayList<String>(remainingData); getPermutation(tempList, currentData + tempList.remove(currentIndex)); } } } private String getCountInformation() { return new StringBuilder().append("第").append(currentCount++).append( "个:").toString(); } /** * 当剩下小于等于两个数据时,输出符合条件的组合 * * @param remainingData * @param currentData */ private void printPermutation(List<String> remainingData, String currentData) { if (1 == remainingData.size()) { System.out.println(new StringBuilder() .append(getCountInformation()).append(remainingData.get(0)) .toString()); } else if (2 == remainingData.size()) { System.out.println(new StringBuilder() .append(getCountInformation()).append(currentData).append( remainingData.get(0)).append(remainingData.get(1)) .toString()); System.out.println(new StringBuilder() .append(getCountInformation()).append(currentData).append( remainingData.get(1)).append(remainingData.get(0)) .toString()); } } public static void main(String[] args) { Permutation perm = new Permutation(); perm.getPermutation(sampleData, EMPTY); } }
输出结果情况
一个元素:
第1个:A
两个元素:
第1个:AB
第2个:BA
三个元素:
第1个:ABC
第2个:ACB
第3个:BAC
第4个:BCA
第5个:CAB
第6个:CBA
五个元素:
第1个:ABCDE
第2个:ABCED
第3个:ABDCE
第4个:ABDEC
第5个:ABECD
第6个:ABEDC
第7个:ACBDE
第8个:ACBED
第9个:ACDBE
第10个:ACDEB
第11个:ACEBD
第12个:ACEDB
第13个:ADBCE
第14个:ADBEC
第15个:ADCBE
第16个:ADCEB
第17个:ADEBC
第18个:ADECB
第19个:AEBCD
第20个:AEBDC
第21个:AECBD
第22个:AECDB
第23个:AEDBC
第24个:AEDCB
第25个:BACDE
第26个:BACED
第27个:BADCE
第28个:BADEC
第29个:BAECD
第30个:BAEDC
第31个:BCADE
第32个:BCAED
第33个:BCDAE
第34个:BCDEA
第35个:BCEAD
第36个:BCEDA
第37个:BDACE
第38个:BDAEC
第39个:BDCAE
第40个:BDCEA
第41个:BDEAC
第42个:BDECA
第43个:BEACD
第44个:BEADC
第45个:BECAD
第46个:BECDA
第47个:BEDAC
第48个:BEDCA
第49个:CABDE
第50个:CABED
第51个:CADBE
第52个:CADEB
第53个:CAEBD
第54个:CAEDB
第55个:CBADE
第56个:CBAED
第57个:CBDAE
第58个:CBDEA
第59个:CBEAD
第60个:CBEDA
第61个:CDABE
第62个:CDAEB
第63个:CDBAE
第64个:CDBEA
第65个:CDEAB
第66个:CDEBA
第67个:CEABD
第68个:CEADB
第69个:CEBAD
第70个:CEBDA
第71个:CEDAB
第72个:CEDBA
第73个:DABCE
第74个:DABEC
第75个:DACBE
第76个:DACEB
第77个:DAEBC
第78个:DAECB
第79个:DBACE
第80个:DBAEC
第81个:DBCAE
第82个:DBCEA
第83个:DBEAC
第84个:DBECA
第85个:DCABE
第86个:DCAEB
第87个:DCBAE
第88个:DCBEA
第89个:DCEAB
第90个:DCEBA
第91个:DEABC
第92个:DEACB
第93个:DEBAC
第94个:DEBCA
第95个:DECAB
第96个:DECBA
第97个:EABCD
第98个:EABDC
第99个:EACBD
第100个:EACDB
第101个:EADBC
第102个:EADCB
第103个:EBACD
第104个:EBADC
第105个:EBCAD
第106个:EBCDA
第107个:EBDAC
第108个:EBDCA
第109个:ECABD
第110个:ECADB
第111个:ECBAD
第112个:ECBDA
第113个:ECDAB
第114个:ECDBA
第115个:EDABC
第116个:EDACB
第117个:EDBAC
第118个:EDBCA
第119个:EDCAB
第120个:EDCBA
发表评论
-
工厂类中移除if/else语句
2016-07-10 19:52 900面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6726本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2212本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1738尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2724本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2166正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3746本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1953问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3976题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3173题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8749EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3326题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6700面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9845Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1415个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2143从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7395for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4136本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2898本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
输出n的全排列,有两种方法: 1. 采用递归插入的方法,如果知道n-1的全排列,n的全排列为将数值n插入的n-1的全排列之间的空隙和两头共n个位置。 2. 采用递归标记填充的方法,查看标记数组,将未标记的数值依次填充...
使用递归 :-------------输入给出正整数n,输出1到n的全排列,排列的输出顺序为字典序,每种排列占一行,数字间无空格,
在这个场景中,我们将探讨如何使用Java语言,通过回溯法来递归实现全排列的输出。 首先,我们需要理解回溯法的基本概念。回溯法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,并在每一步中检查当前的解...
输入N,输出1-N全排列c语言算法,非递归算法................
4. **输出结果:** 最后,根据数组`data`输出最终的全排列。如果在处理过程中发现无法满足题目要求(例如`n`或字符串`s`的长度不符合题目规定),则输出`-1`。 #### 五、代码实现 下面给出一个具体的C++代码实现...
- 最终,程序输出全排列的总数。 ### 总结 本C++程序提供了一个简洁而有效的全排列生成方法,尤其适合初学者理解和学习。通过分析代码,我们不仅能够掌握递归算法的应用,还能深入理解数组管理、条件判断和循环...
全排列是组合数学中的一个...为了深入理解并完成实验,你需要打开这个文件查看具体内容,包括可能的注释、测试用例以及预期的输出。通过实际编写和运行代码,你可以更好地掌握全排列的概念以及C++的递归和回溯技巧。
输出有重复字符的全排列,C++源码......
在介绍的Python回溯法实现数组全排列输出实例中,首先定义了全排列的概念。全排列是指从n个不同元素中取出m个元素的所有可能的排列组合,其中m可以等于或小于n。当m等于n时,我们称之为“全排列”。换言之,全排列是...
如:n=3 全排列的数字为 1 2 3 则输出 123 132 213 231 321 312 2、输入n和k(n》=k)求n个数字的(n,k)排列 如n=3,k=2 输入的三个数位1 2 3 则输出 12 13 21 23 31 32 3、输入n个数(有重复),求n个数字的...
例如,假设我们有5个数`{1, 2, 3, 4, 5}`,初始状态是未排列的,递归函数会尝试各种可能性,如`[1, 2, 3, 4] + [5]`,然后是`[1, 2, 3, 5] + [4]`等,直到所有可能的排列都被生成并输出。 在实际代码中,我们还需要...
在本例中,我们关注的是如何用编程语言来实现全排列的输出,特别地,使用了C++这一强大的系统级编程语言。 在C++中,实现全排列通常会借助递归的思想。递归是一种函数或过程调用自身的技术,它可以用来解决复杂的...
输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序数列。具体格式见输出样例。 【样例输入1】1 【样例输出1】1 【样例说明1】输入整数N=1,...
3. `main()` 函数:这是程序的入口,负责接收用户输入,初始化数组,调用`Perm`函数输出全排列,并在最后输出"end"。 递归的核心在于函数调用自身,每次调用都解决一个更小的问题。在这个实验中,`Perm`函数通过...
//输出全排列 return 0; } 六、结论 本实验报告展示了递归算法在数据结构中的应用,具体来说是递归算法在生成全排列和子集问题中的应用。通过实验,我们熟悉了开发工具的使用,掌握了递归的实现思想,并了解了...
根据给定文件的信息,本文将深入探讨如何使用回溯法来输出自然数1到n的所有不重复排列(即n的全排列)。同时,还将提供一个Java实现的具体示例。 ### 回溯法简介 回溯法是一种通过尝试解决离散和组合问题的方法,...
在main()函数中,我们使用了循环来生成所有可能的全排列,然后将每个全排列输出到屏幕上。 5. 优化策略 在序数法全排列的实现中,我们可以使用一些优化策略来提高算法的效率。例如,我们可以使用动态规划来存储...
简单的实现,代码很短。...输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。
它创建了一个包含 'a', 'b', 'c' 的字符数组,并调用 `permutation` 进行全排列,最后输出所有可能的排列组合。 运行 `testPermutation`,你会看到如下输出: ``` abc acb bac bca cab cba ``` 这正是 'a', 'b', 'c...