`
unbounder
  • 浏览: 174739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单实现全排列(java)

阅读更多
看见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结构来剔除需要排序的数组中有重复元素的情况,这样效率肯定很低(理应在计算中就剔除掉重复情况)。好处倒也有,思路比较简单,而且代码实现也很方便。
0
0
分享到:
评论

相关推荐

    java 递归,全排列

    java 递归,abcd全排列,非常简单的。

    全排列算法部分算法需要自己优化修改

    此外,还可以使用非递归的迭代方法,如“回溯栈”来实现全排列。这种方式避免了递归带来的栈空间消耗,但实现起来相对复杂,需要手动维护待处理的元素集合和当前排列状态。 总结,全排列算法主要通过递归或迭代实现...

    FullPermutation_java_算法_全排列_

    在Java编程中,实现全排列通常涉及到递归或回溯等技术。本篇将详细介绍两种常用的Java方法来解决全排列问题,并探讨相关知识点。 ### 1. 递归法 递归法是一种自上而下解决问题的方法,它通过调用自身来解决子问题...

    组合数学全排列算法(转)

    - **缺点**:虽然实现较为简单,但对于理解算法背后的逻辑有一定的难度。 5. **Steinhaus–Johnson–Trotter算法** - **原理**:该算法结合了Johnson-Trotter算法的优点,通过对元素进行有序的移动来生成排列。 ...

    全排列——递归排序和字典序列

    本文将详细介绍两种实现全排列的方法:递归排列和字典序排列,并通过具体的代码示例来加深理解。 #### 一、递归排列 递归排列是一种直观且易于实现的方法。其基本思路是从集合中依次选取每一个元素作为排列的第一...

    FullPermutation(全排列)

    `backtrack`方法是实现全排列的递归函数,它接受剩余的未使用元素、当前排列和结果列表作为参数。 这个实现的效率并不高,因为每次回溯都需要从当前排列中移除元素,这涉及到数组操作。为了提高效率,可以使用迭代...

    蓝桥杯java历年真题

    Java 实现全排列算法可以使用递归方法,通过将原数组分解为两个部分,一个是已经排列好的部分,另一个是还没有排列的部分。然后,对还没有排列的部分继续递归调用全排列算法,直到所有元素都被排列好为止。 2. 串的...

    全排列算法-递归与字典序的实现方法(Java)

    在Java中,我们可以使用递归或者字典序的方法来实现全排列算法。 首先,让我们深入理解递归方法。递归是一种解决问题的方法,它将问题分解成更小的子问题,直到子问题变得足够简单可以直接解决。在全排列问题中,...

    quanpailie.rar_全排列

    在这个压缩包"quanpailie.rar"中,我们可以期待找到一个简单的全排列实现,作者可能是为了分享学习心得或提供参考代码。 全排列的实现通常涉及到递归和回溯两种主要方法。下面我们将详细探讨这两种方法: 1. **...

    回溯法 - 输出自然数1到n所有不重复的排列,即n的全排列

    此外,Java语言的强大功能也使得实现变得简单明了。在实际应用中,这种方法可以广泛应用于各种需要遍历所有可能性的场景中,如密码破解、图的着色问题等。 以上就是关于如何使用回溯法输出自然数1到n的所有不重复...

    蓝桥杯大赛java历年真题及答案整理.docx

    2. **递归算法实现**:本题采用递归的方式实现全排列的生成。具体步骤如下: - 使用两个向量`source`和`result`,其中`source`存储原始字符集合,`result`用于构建当前的排列组合。 - 当`source`为空时,表示已经...

    实现了排列组合算法的类(JAVA).rar

    这个"实现了排列组合算法的类(JAVA).rar"文件提供了一种高效的JAVA实现,可以处理任意类型数组的排列和组合。下面将详细讨论排列组合的基本概念,以及在JAVA中实现这些算法的关键点。 排列是指从n个不同元素中...

    java24点的算法

    Java实现24点游戏的算法是一项有趣的编程挑战,它涉及到数学、逻辑推理和编程技巧。24点游戏的规则是,给定四个1到13之间的整数,通过加减乘除运算(允许使用括号改变运算顺序)以及可能的数字乘方,使得运算结果...

    输出n个字符的全排列(没有重复字符)

    简单的实现,代码很短。 输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。

    java 中的经典递归

    本节将通过一个具体的Java代码示例来详细介绍递归的应用,该示例实现了字符数组的全排列问题。 ```java public class AllSort { public static void main(String[] args) { char buf[] = {'a', 'b', 'c'}; perm...

    呕心沥血整理的蓝桥杯2014年以前java历年真题及答案

    2. **串的简单处理** - 这道题目要求对用户输入的字符串进行特定格式的处理。具体操作包括: - 将每个单词的首字母转换为大写。 - 在数字和字母之间插入下划线`_`。 - 将连续的空格压缩为一个空格。 代码实现...

    DiGui.zip_Java 8_YBA_排列_汉诺塔_递归

    例如,可以使用Java 8的Stream API来实现全排列的非递归版本,通过`Stream.generate`生成所有可能的组合,然后使用`distinct`去除重复,最后用`forEach`打印结果。 总的来说,这个压缩包提供了实践递归算法的良好...

    最新JAVA编程题全集_50题及答案2

    在Java编程中,实现全排列算法通常会用到回溯法。回溯法是一种系统性地搜索所有可能性的算法,它会尝试每一种可能,直到找到问题的解。在处理字符串全排列的问题时,我们可以从第一个字符开始,尝试将其与后面每个...

    蓝桥杯java历年真题及答案整理

    在提供的代码中,展示了两种不同的全排列实现方法。第一种方法基于递归,通过将源字符集合逐个添加到结果集合中,然后递归处理剩余字符。这种方法利用了Vector容器存储字符,并通过remove方法删除已使用过的字符,...

    全排列问题(详细介绍加图解)

    - 在实现全排列的递归算法时,通常会创建一个数组来保存原始数据。算法的核心是通过交换元素来生成新的排列。具体步骤如下: - (1) 作为递归的基线条件,当只剩下一个元素时,输出当前排列。 - (2) 对于每个未...

Global site tag (gtag.js) - Google Analytics