简单的整理一下全排列思路。全部遍历,打印前筛选条件。全部遍历则是交换,递归,还原。
package SortSet;
public class PermOrder {
private int[] a;
public PermOrder(int[] a) {
this.a = a;
}
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 5 };
new PermOrder(a).premOrder(0);
}
public void premOrder(int n) {
if (n == a.length) {
check();
} else {
for (int i = n; i < a.length; i++) {
swap(i, n);
premOrder(n + 1);
swap(i, n);
}
}
}
private void check() {
if (a[2] != 3)
print();
}
private void print() {
for (int i : a)
System.out.print(i + " ");
System.out.println();
}
private void swap(int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
如果全排列其他东西,把int数组换成string数组之类就OK了。如果要去除重复的话则需要在swap之前做校验了。
分享到:
相关推荐
全排列递归算法,在VC下调试OK,递归算法简单快捷,大家理解理解
全排列算法有两个比较常见的实现:递归排列和字典序排列。 (1)递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。 (2)字典...
山东大学 数据结构实验 全排列 递归练习
用C语言写的一个递归全排列算法,附有较为详细的注释。
php全排列递归算法代码,需要的朋友可以参考下
去重全排列的递归实现 去掉重复数字的 全排列的 递归实现
JAVA递归实现全排列算法,含实现源代码,如a、b、c、d的全排列为: abcd abdc acbd acdb adcb adbc bacd badc bcad bcda bdca bdac cbad cbda cabd cadb cdab cdba dbca dbac dcba dcab dacb dabc
全排列:当n==m时,称为全排列; 比如:集合{ 1,2,3}的全排列为: 代码如下: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}...
常见得全排列有三种解决方案,for循环穷举,stl摸板函数next_permutation,还有DFS深度优先搜索,当我们遇到带有重复的字符串时应该考虑除去重复的部分。
自己整理的关于全排列的递归程序.本例以数组{a,b,c}三个元素作为例子详细讲解。里面的程序都经过VC6.0运行通过,请读者放心使用
全排列-非递归算法(适合动态的新元素加入重新输出全排列-本程序以1到6的数字输出为例)
全排列的非递归实现。 输入1,2,3,4 得到 [1 2 3 4]..........[4 3 2 1]所有24种排列
递归实现元素全排列
递归实现元素全排列
对于求解全排列问题有最暴力的递归枚举法,但是我们希望可以优化时间,因此出现了递归交换法。 例题 洛谷1706 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复...
全排列-基于递归实现
C语言全排列的递归算法,超简单的功能排序
C语言的全排列 注意 当n>10 效率会非常低
不得不说的全排列算法递归实现 我真的是菜啊,留的算法作业几乎没有一次自己写出来过…都是要上网看别人的博客才能懂,自己好笨好菜,