Java 中显示整数数组的所有子集2024年9月10日 | 阅读 9 分钟 给定一个整数数组(或数组列表)。我们的任务是打印给定整数数组的所有子集(不包括空集)。请注意,显示子集的顺序无关紧要。 示例 1 输入 int inputArr[] = {1, 2, 3} 输出 {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} 示例 2 输入 int inputArr[] = {1, 2, 3, 4, 5} 输出 {1}, {2}, {3}, {4}, {5}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 5}, {4, 5}, {1, 2, 3}, {1, 2, 4}, {1, 2, 5}, {1, 3, 4}, {1, 3, 5}, (1, 4, 5}, {2, 3, 4}, {2, 3, 5}, {2, 4, 5}, {3, 4, 5}, {1, 2, 3, 4}, {1, 2, 3, 5}, {1, 2, 4, 5}, {1, 3, 4, 5}, {2, 3, 4, 5}, {1, 2, 3, 4, 5} 方法:使用回溯通过回溯,我们可以生成给定数组的所有子集。对于每个元素,我们只有两个选择。一个是将该元素包含在当前子集中。另一个是将该元素从当前子集中排除。通过这种方式,我们可以生成给定整数数组的所有子集。 步骤如下 步骤 1:创建一个二维数组列表 answer 用于存放所有子集。 步骤 2:同时创建一个列表 tmp 用于存放当前子集。 步骤 3:创建一个递归方法 getSubset(),该方法具有以下四个参数。 步骤 4:一个用于存放当前索引。第二个用于存储当前子集。第三个用于存储所有生成的子集(二维列表),第四个是输入数组。 步骤 5:使用当前索引 0、空当前向量(最初将没有任何子集)、空二维列表和输入整数数组来调用该方法。 步骤 6:在 getSubset() 方法中,我们将 i 元素包含到列表 tmp 中,并递归调用 getSubset(),参数为 i + 1。 步骤 7:当方法调用返回时,我们从 tmp 列表中删除 i 元素,然后再次使用 i + 1 调用 getSubset() 方法。 步骤 8:如果 i 的值与输入数组的大小相同,则将列表 tmp 添加到列表 answer 中。 步骤 9:最后,对列表 answer 中的每个子数组进行排序并显示。 现在让我们看看上述步骤的实现。 文件名: SubsetIntArr.java 输出 For the array list: [1, 2, 3] The subsets are: [ 1 2 3 ] [ 1 2 ] [ 1 3 ] [ 1 ] [ 2 3 ] [ 2 ] [ 3 ] For the array list: [1, 2, 3, 4, 5] The subsets are: [ 1 2 3 4 5 ] [ 1 2 3 4 ] [ 1 2 3 5 ] [ 1 2 3 ] [ 1 2 4 5 ] [ 1 2 4 ] [ 1 2 5 ] [ 1 2 ] [ 1 3 4 5 ] [ 1 3 4 ] [ 1 3 5 ] [ 1 3 ] [ 1 4 5 ] [ 1 4 ] [ 1 5 ] [ 1 ] [ 2 3 4 5 ] [ 2 3 4 ] [ 2 3 5 ] [ 2 3 ] [ 2 4 5 ] [ 2 4 ] [ 2 5 ] [ 2 ] [ 3 4 5 ] [ 3 4 ] [ 3 5 ] [ 3 ] [ 4 5 ] [ 4 ] [ 5 ] 复杂度分析:显然,一次递归调用会产生另外两次递归调用。考虑到这一点,时间复杂度为 (2N)。此外,打印每个子集需要 O(N) 的时间。因此,程序的总时间复杂度为 O(N x 2N)。二维数组列表存储所有子集,子集总数为 O(2N),而一个子集的最大大小可以为 O(N)。因此,该程序空间复杂度为 O(N x 2N),其中输入列表中存在的元素总数为 N。 实现:使用位掩码查找所有子集的突出技术之一是使用位掩码。在这种方法中,我们将输入列表的每个元素视为其对应的位。如果该位被设置,那么我们将该元素包含在当前子集中;否则,则不包含。考虑一个包含三个元素的数组。 Int arr[] = {4, 5, 9}。由于有三个元素,我们将使用三位。对于三位,有 8 (2^3 = 8) 种不同的可能性:000、001、010、011、100、101、110、111。如果从左到右考虑这些可能性,则第一种可能性 (000) 不包含任何元素。第二种可能性 001 仅包含第三个元素 (arr[2])。第三种可能性 010 包含第二个元素 (arr[1])。第四种可能性 011 包含第二个和第三个元素 (arr[1] 和 arr[2])。第五种可能性 100 包含第一个元素 (arr[0]),依此类推。因此,
由于我们不考虑任何空集,因此我们得到的子集是 [9]、[5]、[5, 9]、[4]、[4, 9]、[4, 5]、[4, 5, 9],这是输入数组 [4, 5, 9] 的要求答案。现在让我们看看涉及的步骤。 步骤 1:声明一个二维列表 answer,用于存放所有子集。 步骤 2:开始一个 for 循环,让 val 从 1 到 2N -1。 步骤 3:同时,开始一个内部 for 循环,从 0 到 N - 1。 步骤 4:如果 val 中的第 i 位设置为 1,则将输入数组的第 i 个元素添加到当前子集中。 步骤 5:将每个生成的子集添加到二维列表 answer 中。 步骤 6:最后,通过换行符对二维列表 answer 中的每个列表进行排序并显示。 现在让我们看看上述步骤的实现。 文件名: SubsetIntArr1.java 输出 For the array list: [1, 2, 3] The subsets are: [ 1 ] [ 2 ] [ 1 2 ] [ 3 ] [ 1 3 ] [ 2 3 ] [ 1 2 3 ] For the array list: [1, 2, 3, 4, 5] The subsets are: [ 1 ] [ 2 ] [ 1 2 ] [ 3 ] [ 1 3 ] [ 2 3 ] [ 1 2 3 ] [ 4 ] [ 1 4 ] [ 2 4 ] [ 1 2 4 ] [ 3 4 ] [ 1 3 4 ] [ 2 3 4 ] [ 1 2 3 4 ] [ 5 ] [ 1 5 ] [ 2 5 ] [ 1 2 5 ] [ 3 5 ] [ 1 3 5 ] [ 2 3 5 ] [ 1 2 3 5 ] [ 4 5 ] [ 1 4 5 ] [ 2 4 5 ] [ 1 2 4 5 ] [ 3 4 5 ] [ 1 3 4 5 ] [ 2 3 4 5 ] [ 1 2 3 4 5 ] 复杂度分析:该程序的时间复杂度和空间复杂度与前一个程序相同。 下一个主题Java 中数字阶乘的位数计数 |
在 Java 中,可以使用 SortedSet 的 add() 函数将特定元素添加到 Set 集合中。此方法可确保添加的项保留集合的固有顺序,因为 SortedSet 实现(如 TreeSet)会自动对元素进行排序。将一个元素作为...
阅读 2 分钟
java.text 中的内置方法之一是 getMaximumIntegerDigits()。Java 的 DecimalFormat 类用于确定数字整数部分可以包含的最大位数。数字中出现在小数点 (.) 之前的部分称为...
阅读 2 分钟
图案因其美学吸引力以及它们为我们的可见世界带来的秩序感而一直吸引着人类。尤其是方形图案,它们简单而优雅,并且可以在 Java 中相对轻松地创建。在本节中,我们将深入...
阅读 4 分钟
上下文关键字以前称为受限标识符和受限关键字。上下文关键字是根据它们在语法语法中出现的位置来确定的。这些关键字在代码中具有特定含义。它们不是像 abstract、new、final、try 等保留关键字...
阅读 3 分钟
查找最长无重复字符子串长度的任务是算法编程中的一个重要挑战。该问题涉及识别给定字符串中每个字符只出现一次的连续部分的 are length。解决此挑战在...
阅读 16 分钟
在本节中,我们将讨论二叉树在 Java 中的垂直顺序遍历及其实现的不同方法。在垂直顺序遍历中,我们从上到下垂直打印二叉树的节点。例如,考虑...
阅读 8 分钟
三角形不等式定理用于检查三个给定的边是否可以构成一个三角形。该定理断言两边之和需要大于第三边。使用此规则,我们可以快速验证边是否可以形成有效的三角形,… …
5 分钟阅读
?借助 Java 的动态 SQL 查询,我们可以即时创建和执行 SQL 语句,为数据库交互提供灵活性和适应性。在本节中,我们将讨论在 Java 中编写动态 SQL 查询的过程,包括全面的代码示例……
5 分钟阅读
? Java 是一种用途广泛且功能强大的编程语言,由于其“一次编写,到处运行”的理念而广受欢迎。实现这一点的关键组件之一是 Java 运行时环境 (JRE)。在本节中,我们将深入探讨 JRE 的作用...
阅读 3 分钟
Java 和 .NET 是用于构建各种应用程序的两个最主要的开发平台。两者都有其优点,并根据项目的具体需求进行选择。以下是 Java 和 .NET 的详细比较。Java 和 .NET 概述...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India