看见provista在研究这个,自己写一个试试看,动态规划的思路,时间复杂度和空间复杂度懒得算了。
public <T> void start(final T[] srcString) {
// TODO Auto-generated method stub
int index = 0;
Set<String> set = new HashSet<String>();
while (index < srcString.length) {
set = doPerm(set, srcString[index++]);
}
System.out.println(set.size());
System.out.println(set.toString());
}
private <T> Set<String> doPerm(final Set<String> set, final T temp) {
Set<String> tempResult = new HashSet<String>();
if (set.size() == 0) {
tempResult.add(temp.toString());
} else {
for (String t : set) {
for (int i = 0; i < t.length() + 1; i++) {
StringBuilder sb = new StringBuilder();
if (i == 0) {
sb.append(temp);
sb.append(t);
} else if (i == t.length()) {
sb.append(t);
sb.append(temp);
} else {
sb.append(t.substring(0, i));
sb.append(temp);
sb.append(t.substring(i));
}
tempResult.add(sb.toString());
}
}
}
return tempResult;
}
算法缺点肯定不少,比如我是利用java的set结构来剔除需要排序的数组中有重复元素的情况,这样效率肯定很低(理应在计算中就剔除掉重复情况)。好处倒也有,思路比较简单,而且代码实现也很方便。
分享到:
相关推荐
java 递归,abcd全排列,非常简单的。
此外,还可以使用非递归的迭代方法,如“回溯栈”来实现全排列。这种方式避免了递归带来的栈空间消耗,但实现起来相对复杂,需要手动维护待处理的元素集合和当前排列状态。 总结,全排列算法主要通过递归或迭代实现...
在Java编程中,实现全排列通常涉及到递归或回溯等技术。本篇将详细介绍两种常用的Java方法来解决全排列问题,并探讨相关知识点。 ### 1. 递归法 递归法是一种自上而下解决问题的方法,它通过调用自身来解决子问题...
- **缺点**:虽然实现较为简单,但对于理解算法背后的逻辑有一定的难度。 5. **Steinhaus–Johnson–Trotter算法** - **原理**:该算法结合了Johnson-Trotter算法的优点,通过对元素进行有序的移动来生成排列。 ...
本文将详细介绍两种实现全排列的方法:递归排列和字典序排列,并通过具体的代码示例来加深理解。 #### 一、递归排列 递归排列是一种直观且易于实现的方法。其基本思路是从集合中依次选取每一个元素作为排列的第一...
`backtrack`方法是实现全排列的递归函数,它接受剩余的未使用元素、当前排列和结果列表作为参数。 这个实现的效率并不高,因为每次回溯都需要从当前排列中移除元素,这涉及到数组操作。为了提高效率,可以使用迭代...
Java 实现全排列算法可以使用递归方法,通过将原数组分解为两个部分,一个是已经排列好的部分,另一个是还没有排列的部分。然后,对还没有排列的部分继续递归调用全排列算法,直到所有元素都被排列好为止。 2. 串的...
在Java中,我们可以使用递归或者字典序的方法来实现全排列算法。 首先,让我们深入理解递归方法。递归是一种解决问题的方法,它将问题分解成更小的子问题,直到子问题变得足够简单可以直接解决。在全排列问题中,...
在这个压缩包"quanpailie.rar"中,我们可以期待找到一个简单的全排列实现,作者可能是为了分享学习心得或提供参考代码。 全排列的实现通常涉及到递归和回溯两种主要方法。下面我们将详细探讨这两种方法: 1. **...
此外,Java语言的强大功能也使得实现变得简单明了。在实际应用中,这种方法可以广泛应用于各种需要遍历所有可能性的场景中,如密码破解、图的着色问题等。 以上就是关于如何使用回溯法输出自然数1到n的所有不重复...
2. **递归算法实现**:本题采用递归的方式实现全排列的生成。具体步骤如下: - 使用两个向量`source`和`result`,其中`source`存储原始字符集合,`result`用于构建当前的排列组合。 - 当`source`为空时,表示已经...
这个"实现了排列组合算法的类(JAVA).rar"文件提供了一种高效的JAVA实现,可以处理任意类型数组的排列和组合。下面将详细讨论排列组合的基本概念,以及在JAVA中实现这些算法的关键点。 排列是指从n个不同元素中...
Java实现24点游戏的算法是一项有趣的编程挑战,它涉及到数学、逻辑推理和编程技巧。24点游戏的规则是,给定四个1到13之间的整数,通过加减乘除运算(允许使用括号改变运算顺序)以及可能的数字乘方,使得运算结果...
简单的实现,代码很短。 输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。
本节将通过一个具体的Java代码示例来详细介绍递归的应用,该示例实现了字符数组的全排列问题。 ```java public class AllSort { public static void main(String[] args) { char buf[] = {'a', 'b', 'c'}; perm...
2. **串的简单处理** - 这道题目要求对用户输入的字符串进行特定格式的处理。具体操作包括: - 将每个单词的首字母转换为大写。 - 在数字和字母之间插入下划线`_`。 - 将连续的空格压缩为一个空格。 代码实现...
例如,可以使用Java 8的Stream API来实现全排列的非递归版本,通过`Stream.generate`生成所有可能的组合,然后使用`distinct`去除重复,最后用`forEach`打印结果。 总的来说,这个压缩包提供了实践递归算法的良好...
在Java编程中,实现全排列算法通常会用到回溯法。回溯法是一种系统性地搜索所有可能性的算法,它会尝试每一种可能,直到找到问题的解。在处理字符串全排列的问题时,我们可以从第一个字符开始,尝试将其与后面每个...
在提供的代码中,展示了两种不同的全排列实现方法。第一种方法基于递归,通过将源字符集合逐个添加到结果集合中,然后递归处理剩余字符。这种方法利用了Vector容器存储字符,并通过remove方法删除已使用过的字符,...
- 在实现全排列的递归算法时,通常会创建一个数组来保存原始数据。算法的核心是通过交换元素来生成新的排列。具体步骤如下: - (1) 作为递归的基线条件,当只剩下一个元素时,输出当前排列。 - (2) 对于每个未...