递归实现排列的打印功能
public static void main(String[] args) throws Exception {
perm(new String[] { "a", "b", "c", "d" });
System.out.println();
perm(new String[] { "a", "b", "c", "d" }, 2);
System.out.println();
perm(new String[] { "a", "b", "c", "d" }, 0);
}
// 全排列入口
private static void perm(String[] a) {
if (a != null) {
perm(a, 0, a.length);
}
}
// 部分排列入口
private static void perm(String[] a, int count) {
if (a != null && count >= 0 && count <= a.length) {
perm(a, 0, count);
}
}
private static void perm(String[] a, int start, final int count) {
if (start == count) {
for (int i = 0; i < count; i++) {
System.out.print(a[i] + ", ");
}
System.out.println();
} else {
for (int i = start; i < a.length; i++) {
swap(a, start, i);
perm(a, start + 1, count);
swap(a, start, i);
}
}
}
private static void swap(String[] a, int i, int j) {
String t = a[i];
a[i] = a[j];
a[j] = t;
}
分享到:
相关推荐
c++实现的关于递归实现逆序字符串,有需要的可以下载
数字排列组合是个经典的算法问题,它很通俗易懂,适合不懂业务的人...这种算法常用递归或迭代来实现,单当M=14时,中间结果数量已经过亿,再大的话很容易超过单台机器的处理能力,所以我用hadoop来实现多机分别处理。
PHP递归实现一位数组的排列算法。欢迎下载和评论。
本资源附带文档解释了排列组合算法的实现和原理。其中排列算法是基于递归实现的,组合算法是基于高效的位移法实现的。代码是使用Java版实现的。
排列与组合的Java递归实现.doc
递归实现排列型枚举.md
第一次上传,多多支持 棋盘覆盖算法 递归排列 C++实现
使用递归实现N重循环,这里的N是不确定的。 此代码实现的功能描述如下: 1. 有一个字符串的矩阵,用vector< vector< CStirng > > 表示 2. 行与行之间进行排列组合 3. 输出所有组合的方式
Please use recursion(递归)to get fibonacci numbers(一种整数数列). The user will specify(指定,详细说明) how many of the numbers he or she wants to print. You can use the main function to print ...
全排列的非递归实现。 输入1,2,3,4 得到 [1 2 3 4]..........[4 3 2 1]所有24种排列
这个程序绝对绝对能够加深对递归算法的理解。 并且对理解随机数的产生有帮助。另外还实现了全排列。
递归实现十进制数从高位到低位依次输出 主要是我对递归算法的初步理解后试手制作希望对你有用
对案例进行排列组合的小程序
用递归算法实现的简单排列生成器 其中K是开始排列点,m是数组的长度
首先通过递归的方法实现二叉树的创建,分别访问左边子树和右边子树来实现先序、中序、后序的排列
(1)递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。 (2)字典序排列 把升序的排列(当然,也可以实现为降序)作为当前排列...
其实排列实现了,组合也就实现了,组合C(N,R)就是P(N,R)/P(R,R) ,实现这一功能比较简单的是递归算法,但考虑到递归的性能,下面采用了2种非递归的方法,具体代码如下 using System; using System.Collections....
组合算法的重要性不言而喻,本文很巧妙地使用递归实现组合算法,呕心沥血之作,组合过程独创。
(一)非递归全排列算法基本思想是: 1.找到所有排列中最小的一个排列P. 2.找到刚刚好比P大比其它都小的排列Q, 3.循环执行第二步,直到找到一个最大的排列,算法结束.下面用数学的方法描述:给定已知序列 P = A1A2A3...
C语言 C语言编程 排序法学习