如下面代码:
import java.util.ArrayList;
public class FullSort
{
public static void main(String[] args)
{
String str = "2468";
FullSort fs = new FullSort();
ArrayList<String> list = fs.permutation(str);
System.out.println("Total num : " + list.size());
for(String s : list)
System.out.println(s);
System.out.println();
int[] arr = {1, 2, 3, 4};
fs.perm(arr, 0, arr.length-1);
}
public ArrayList<String> permutation(String str)
{
ArrayList<String> list = new ArrayList<String>();
if(str.length() == 1)
{
list.add(str);
}
else
{
String temp = "";
String left = "";
for(int i=0; i<str.length(); i++)
{
temp = str.charAt(i) + "";
left = str.substring(0, i) + str.substring(i+1);
for(String element : permutation(left))
{
list.add(temp + element);
}
}
}
return list;
}
public void perm(int[] arr, int k, int m)
{
if(k == m)
{
for(int i=0; i<=m; i++)
{
System.out.print(arr[i]);
}
System.out.println();
}
else
{
for(int i=k; i<=m; i++)
{
Swap(arr, k, i);
perm(arr, k+1, m);
Swap(arr, k, i);
}
}
}
public void Swap(int[] arr, int i, int j)
{
int temp = -1;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
输出结果就不显示了。
如下面代码:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class FullSort2
{
public static void main(String[] args)
{
int[] arr = {1, 3, 5, 7};
StringBuffer sb = new StringBuffer();
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i=0; i<arr.length; i++)
{
sb.append(arr[i]);
list.add(arr[i]);
}
FullSort2 test = new FullSort2();
test.printAll(sb, "", list.size());
System.out.println();
test.printAll(list, "", list.size());
}
public void printAll(StringBuffer candidate, String prefix, int length)
{
if(prefix.length() == length)
{
System.out.println(prefix);
}
for(int i=0; i<candidate.length(); i++)
{
StringBuffer temp = new StringBuffer(candidate.toString());
String str = prefix+temp.charAt(i);
temp.deleteCharAt(i);
printAll(temp, str, length);
}
}
public void printAll(List<Integer> candidate, String prefix, int length)
{
if(prefix.length() == length)
{
System.out.println(prefix);
}
for(int i=0; i<candidate.size(); i++)
{
List<Integer> temp = new LinkedList<Integer>(candidate);
String str = prefix+temp.remove(i);
printAll(temp, str, length);
}
}
}
结果也不输出了。
分享到:
相关推荐
在Java编程中,全排列是一个常见的问题,它涉及到算法和数据结构的知识。全排列是指从给定的字符数组中,按照一定的顺序生成所有可能的排列组合。这个问题通常使用回溯法来解决,因为它能够有效地避免重复的排列。...
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
java实现全排列
Java 全排列算法实现,网上搜的,然后整理了一下。呵呵`````
这是一个Java编写的数组的全排列程序 如一个数组 a,b,c,d 它的全排列为: a b c d a b d c a c b d a c d b a d b c a d c b b a c d b a d c b c a d b c d a b d a c b d c a ……
题目描述:给定一个数列a1,a2,a3…an,输出他所有的全排列。 算法设计描述: 1、获取当前的一种排列,用start,end分别表示该排列的列头,列尾; 2、判断start是否和end相等,若相等,执行3,否则执行4; 3、将当前...
java 递归,abcd全排列,非常简单的。
java算法分析与设计之全排列问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,尤其...
只用了一维长度为9的数组 全排列问题可以看做简化规则的八皇后问题噢!!
标题中的“全排列的Hash函数(JAVA)”指的是在Java编程中使用Hash函数处理全排列问题。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来的所有可能的排列方式。在这个场景下,Hash函数通常用于快速查找...
在这个场景中,我们将探讨如何使用Java语言,通过回溯法来递归实现全排列的输出。 首先,我们需要理解回溯法的基本概念。回溯法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,并在每一步中检查当前的解...
Java写的源码,解决各种字符串全排列问题,已解决重复问题,经过上机调试可直接运行
全排列算法是计算机科学中一个基础且重要的问题,它涉及到数组或序列的所有可能的线性排列方式。在处理这个问题时,我们通常会采用递归或迭代的方式来实现。下面将详细介绍全排列算法及其优化方法。 全排列算法的...
全排列的非递归实现。 输入1,2,3,4 得到 [1 2 3 4]..........[4 3 2 1]所有24种排列
全排列算法: 比如字符串abc,全排列结果为abc,acb,bac,bca,cba,cab。
在Java编程中,实现全排列通常涉及到递归或回溯等技术。本篇将详细介绍两种常用的Java方法来解决全排列问题,并探讨相关知识点。 ### 1. 递归法 递归法是一种自上而下解决问题的方法,它通过调用自身来解决子问题...
示例:输入: [1,2,3]输出:public class Arrange {//排列数组 k-m 的元素public void method(int[] ar
在Java中实现重复元素全排列,通常采用递归的方法。核心思想是通过交换元素的位置来生成不同的排列组合,并检查每次交换是否产生了一个新的、未被记录的排列。为了避免重复计算,可以使用一个辅助函数`Judge()`来...
"JAVA用递归实现全排列算法的示例代码" JAVA用递归实现全排列算法的示例代码主要介绍了JAVA用递归实现全排列算法的相关资料。全排列算法是一种经典的算法,在数学和计算机科学领域中有着广泛的应用。该算法的主要...
在本例中,我们将讨论如何使用递归方法实现全排列,以Java、C#、C++等主流编程语言为例。 全排列算法的核心思想是通过递归地交换元素来生成所有可能的序列。假设我们有一个包含n个不同元素的数组,全排列的数量是n...