import java.util.Iterator;
import java.util.TreeSet;
public class Sort {
private String[] b = new String[] {"1","2","2","3","4","6"};
private int n = b.length;
private boolean[] visited = new boolean[n];
private int[][] a = new int[n][n];
private String result = "";
private TreeSet<String> set = new TreeSet<String>();
public static void main(String[] args) {
new Sort().start();
}
private void start() {
// Initial the map a[][]
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
a[i][j] = 0;
} else {
a[i][j] = 1;
}
}
}
// 3 and 5 can not be the neighbor.
a[3][5] = 0;
a[5][3] = 0;
// Begin to depth search.
for (int i = 0; i < n; i++) {
this.depthFirstSearch(i);
}
// Print result treeset.
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
System.out.println(string);
}
}
private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];
if (result.length() == n) {
// "4" can not be the third position.
if (result.indexOf(" 4 ") != 2) {
// Filt the duplicate value.
set.add(result);
}
}
for (int j = 0; j < n; j++) {
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
}
}
// restore the result value and visited value after listing a node.
result = result.substring(0, result.length() - 1);
visited[startIndex] = false;
}
}
分享到:
相关推荐
Java写的源码,解决各种字符串全排列问题,已解决重复问题,经过上机调试可直接运行
在全排列问题中,我们从数组的第一个元素开始,每次尝试将其与后面的元素交换位置,并递归地处理剩余的元素,直到所有元素都尝试过,这样就能得到所有可能的排列。 在上述代码中,`AllSort` 类包含了实现全排列的...
"java实现字符串的全排列" java实现字符串的全排列是指通过编程语言java来生成一个字符串的所有可能排列。例如输入字符串abc,则输出所有可能的排列组合:abc,acb,bac,bca,cab和cba。 在java中,实现字符串的...
在字符串全排列问题中,我们需要找出一个给定字符集的所有可能的排列组合。例如,对于字符串 "abc",全排列包括 "abc"、"acb"、"bac"、"bca"、"cab" 和 "cba"。这个问题可以使用回溯法来解决,其基本步骤如下: 1. ...
Java递归实现字符串全排列和全组合是一种高效的算法,可以解决字符串的排列和组合问题。但是,需要注意的是,递归算法需要将问题分解成更小的子问题,然后解决这些子问题,并将结果组合起来构成原始问题的解答。
- `TestPermute.java`:可能实现了字符串的全排列算法,并命名为`permute`方法。 - `Test2.java`:可能是对另一种算法的实现,比如改进或优化过的版本。 - `Test.java`:通常用于编写单元测试,检验各种输入情况下,...
简单的实现,代码很短。...输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。
在编程领域,全排列是一个经典的算法问题,它涉及到数组或字符串的所有可能的顺序组合。当给定一个包含N个不同元素的集合时,全排列就是要列出所有可能的N!(N的阶乘)种排列方式。在这个场景中,我们将探讨如何使用...
本文将详细介绍Java实现abc字符串的排列组合,主要包括可重复排列、全排列和组合三个部分。 可重复排列 在Java中,可以使用递归来实现abc字符串的可重复排列。可重复排列是指从abc三个字符中选择字符,组成长度为3...
标题中的“全排列的Hash函数(JAVA)”指的是在Java编程中使用Hash函数处理全排列问题。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来的所有可能的排列方式。在这个场景下,Hash函数通常用于快速查找...
全排列算法: 比如字符串abc,全排列结果为abc,acb,bac,bca,cba,cab。
这种算法常用于密码学、数据加密以及计算机科学中的各种组合优化问题,例如在处理含有重复字母的字符串时,找出所有可能的重组方式。 #### 知识点二:算法实现原理 在Java中实现重复元素全排列,通常采用递归的...
1. 字符串全排列: 在提供的代码中,可以看到两种实现字符串全排列的方法。它们都是通过递归的方式来生成所有可能的字符组合。核心逻辑是遍历基础字符串(base),在每次迭代中删除一个字符,并将这个字符添加到...
此题不仅考验对字符串及字符数组的操作熟练度,还加深了对Java中字符串处理函数应用的理解。 通过深入解析这些精选题目,学习者不仅能够掌握Java递归、字符串操作、字符数组运用等核心技能,还能熟悉面向对象编程的
第一部分代码实现了一个全排列算法,它遍历输入字符串中的每个字符,并递归地删除已使用过的字符,形成新的字符串基础,然后将当前字符添加到已构建的组合中。这种方法称为回溯法,用于生成所有可能的字符串组合。...
3. **全排列问题**:对于字符串数组的全排列,可以采用回溯算法或者动态规划来解决,涉及到数组操作和递归。 4. **JavaScript编程**:在浏览器中显示当前星期,可以用JavaScript的Date对象获取日期,然后处理输出。...
- 首先,对输入字符串进行全排列,生成所有可能的旋转字符串。 - 接着,将这些旋转字符串按其最后一个字符的字典序进行排序。 - 最后,取排序后的第一列作为BWT结果。 2. **逆Burrows-Wheeler转换**: - 逆BWT...
字典排序,也称为字典序,是一种特殊的排序方式,特别是在字符串中应用广泛。它将字符串按照字典的顺序排列,即按照字符的Unicode值进行升序排序。在处理全排列问题时,字典排序可以帮助我们系统地生成所有可能的...
根据提供的文件信息,可以...这些知识点涉及编程基础、数据结构、算法设计、字符串处理以及日期时间处理等多方面内容,对于从事Java后端开发的人员来说,掌握这些知识点对于提升编程能力、解决实际问题有着重要的意义。
1. 字符串全排列: 这个题目是要求实现一个函数,生成给定字符串所有可能的排列组合。这里使用了递归算法,通过删除字符串中的一个字符并将其添加到当前缓冲区,然后对剩余部分进行相同的操作,最终得到所有排列。...