代码来自于:
http://shmilyaw-hotmail-com.iteye.com/blog/1721523
这段代码看了好久才看懂,真为自己的智商捉急。
public static void permu(int[] a, int len, int cur) {
if(a == null || len < 1)
return;
if(cur == len) { //判断集合s是否为空
printList(a);
} else {
for(int i = 1; i <= len; i++) {
if(!contains(a, i, cur)) {
a[cur] = i;
permu(a, len, cur + 1);
}
}
}
}
递归实现的时候,在每次入栈的时候都会保存执行到哪里了的地址,在出栈的时候,从没有执行的代码开始执行。
在进栈的下面我加上一段没有执行的代码。system.out.println();
第一次进栈的时候
public static void permu(int[] a, int len, int cur) {
if(a == null || len < 1)
return;
if(cur == len) { //判断集合s是否为空
printList(a);
} else {
for(int i = 1; i <= len; i++) {
if(!contains(a, i, cur)) {
a[cur] = i;
permu(a, len, cur + 1); //进栈前i=1,在下次出栈的时候,从i=2,开始执行。进栈的时候执行到什么地方,下次就从什么地方开始执行。
system.out.println(); //未执行代码,下次出栈的时候将从这里开始执行
}
}
}
}
第二次进栈的时候:
public static void permu(int[] a, int len, int cur) {
if(a == null || len < 1)
return;
if(cur == len) { //判断集合s是否为空
printList(a);
} else {
for(int i = 1; i <= len; i++) {
if(!contains(a, i, cur)) {
a[cur] = i;
permu(a, len, cur + 1); //进栈前i=2,在下次出栈的时候,从i=3,开始执行。进栈的时候执行到什么地方,下次就从什么地方开始执行。
system.out.println(); //未执行代码,下次出栈的时候将从这里开始执行
}
}
}
}
今天傻逼看了半天才看明白。
分享到:
相关推荐
总之,这个资源包提供了一个很好的平台,让你能够深入理解并实践Java中的排列组合算法。通过学习和理解这些代码,你不仅可以增强算法设计能力,还能提高解决实际编程问题的能力。记得动手实践,结合文档和代码,将...
在Java编程语言中,通过不同的控制结构如for循环、递归等可以实现这些排列组合的功能。 #### 二、核心知识点 ##### 1. 排列组合定义 - **排列**:是指从n个不同元素中任取m(m≤n)个元素按照一定的顺序排成一列。...
压缩包中的文件名为“Zuhe”,可能是实现组合排列算法的Java源代码文件。通过查看这个文件,我们可以了解具体的实现细节,包括使用的数据结构、递归或非递归的策略,以及如何处理边界条件等。 总的来说,组合排列是...
总结来说,从n个数组中取出所有排列组合的Java实现涉及到递归算法、回溯法以及数据结构的操作。理解这些概念并能够熟练运用是成为一名优秀程序员的关键。通过这个例子,我们可以看到如何利用Java的灵活性和表达力来...
在Java中实现排列组合算法,通常会用到递归或者回溯法。以下是一些核心的代码片段: 1. **Combination.java** 可能是一个实现组合的类,通常会包含一个`combine`方法,用于生成所有可能的组合。该方法可能会使用...
在这个场景中,我们将探讨如何使用Java语言,通过回溯法来递归实现全排列的输出。 首先,我们需要理解回溯法的基本概念。回溯法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,并在每一步中检查当前的解...
此外,文档还提供了各种排列组合算法的详细代码示例和实现细节,包括递归和迭代方法。文档还涵盖了高级主题,如如何计算有重复元素的排列组合数量,以及如何优化这些算法的性能。 无论您是Java编程的初学者还是有...
在这个例子中,通过交换 `buf` 数组中的元素位置,并递归调用 `perm` 函数来处理剩余的子数组,从而逐步构建出所有可能的排列组合。 ##### 3. 具体步骤分析 1. **初始化**:首先定义一个字符数组 `buf` 和一个 `...
在Java中,实现多个数组间的排列组合可以使用递归算法,通过循环和数组索引来实现排列组合。下面是 Java 实现多个数组间的排列组合的示例代码: ```java public void doExchange(List arrayLists){ int len=...
总的来说,理解和掌握排列组合的算法及其在源代码中的实现是编程能力的重要组成部分。通过递归和分治策略,我们可以有效地解决这些问题,并且在实际项目中应用这些概念,如优化搜索路径、生成所有可能的解决方案等。
Java代码实现时,会用到ArrayList或其他数据结构来存储当前的排列状态,同时使用递归方法实现DFS。为了在用户界面展示结果,可能还会用到Swing或JavaFX等图形库来创建窗口和按钮,让用户可以启动或停止算法,以及...
Java 实现字符串排列组合问题 ...在本文中,我们详细介绍了 Java 实现字符串排列组合问题的解决方案,并提供了详细的代码实现。这些解决方案可以帮助开发者更好地解决字符串排列组合问题,并提高开发效率。
- **递归与迭代**:文件中的实现结合了递归和迭代的思想,通过递归生成子排列,并通过迭代更新结果。这种方式有效地减少了不必要的递归调用,提高了性能。 - **辅助函数的使用**:`getEstateRowData`、`getRowData`...
总结来说,这两段Java代码展示了如何用回溯法解决排列组合问题。对于有重复元素的排列,需要额外的逻辑来避免重复;而对于无重复元素的排列,可以直接进行全排列的生成。理解这些算法对于提升编程技能和解决实际问题...
以下是Java递归实现字符串全排列和全组合的示例代码: ```java public final class PermutationCombinationHolder { / * 数组元素的全组合 */ static void combination(char[] chars) { char[] subchars = new...
全排列问题是指给定一个字符串,求出该字符串的所有可能的排列组合。例如,对于字符串 "abc",其所有可能的排列为 "abc"、"acb"、"bac"、"bca"、"cab" 和 "cba"。 **代码分析:** ```java public class Permutation...
本文将探讨两种不同的Java实现方法,分别基于二进制状态法和递归思想,用于生成排列组合。 首先,我们来看第一种方法:**二进制状态法**。这种方法的核心思想是利用二进制数来表示每个排列,然后通过遍历所有可能的...
上述代码实现了排列组合字符串的方法,首先使用递归函数 `sort` 生成所有可能的排列组合,然后使用 `HashSet` 消除重复值,最后打印输出所有排列组合和个数。 代码解释 在上述代码中,我们首先定义了一个测试方法 `...
总结来说,“插入算法”是解决排列组合问题的一种有效方法,它通过递归和回溯实现了对所有可能排列的生成。在实际编程中,这种算法不仅适用于排列问题,也可以在其他需要穷举所有可能解的问题中发挥作用,如密码学、...
全排列是指从给定的字符数组中,按照一定的顺序生成所有可能的排列组合。这个问题通常使用回溯法来解决,因为它能够有效地避免重复的排列。下面我们将深入探讨如何使用Java实现字符数组的全排列。 首先,我们需要...