当前位置: 首页 > 知识库问答 >
问题:

在java中查找给定集合的所有子集,并按此顺序

闾丘诚
2023-03-14

实际上我想这样写一个给定集合的所有子集:

例如,如果我的集合是A:{1,2},我希望有{} , {1},{2},{1,2}

这就是我尝试的:

    static void printSubsets(java.util.Set<Integer> a) {
            int n = a.size();
            // Run a loop for printing all 2^n
            // subset one by one
            for (int i = 0; i < (1 << n); i++) {
                System.out.print("{");
                // Print current subset
                for (int j = 0; j < n; j++) {
    
                    // (1<<j) is a number with jth bit 1
                    // so when we 'and' them with the
                    // subset number we get which numbers
                    // are present in the subset and which
                    // are not
                    if ((i & (1 << j)) > 0)
                        System.out.print(a.toArray()[j] + ",");
                    if (j == n - 1)
                       System.out.print(a.toArray()[j]);
                }
                System.out.print("} , ");
            }
        }

这是输出{}、{1,}、{2,}、{1,2,},我的问题是。我不希望在每个子集的末尾和整个输出的末尾都有。你能帮我解决这个问题,让我的输出像<code>{}、{1}、}2}、{1,2}</code>?最后,我想把它们分类

共有1个答案

颛孙飞鸾
2023-03-14

如果允许您使用番石榴,您可以利用它的< code>Sets类和< code>Sets.combinations(Set

static void printSubsets(Set<Integer> a) {

    String combinations = IntStream.rangeClosed(0, a.size()).boxed()
            .flatMap(i -> Sets.combinations(a, i).stream()
                                    .sorted(Comparator.comparingInt(Collections::max)))
            .map(subSet -> subSet.stream().sorted().map(String::valueOf)
                                    .collect(Collectors.joining(",", "{", "}")))
            .collect(Collectors.joining(" , "));

    System.out.println(combinations);
}

然后:

Set<Integer> set = Set.of(1, 2);

printSubsets(set);

输出:

{} , {1} , {2} , {1,2}
 类似资料:
  • 问题内容: 我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,喜爱的猫食等等。 Java集中存储了一堆猫,我需要查找所有3岁的猫,或者最喜欢猫粮的Whiskas。当然,我可以编写一个自定义方法来查找那些具有特定属性的Cat,但是这样做会麻烦许多属性。有一些通用的方法吗? 问题答案: 您可以编写一个采用接口实例的方法,该实例定义了一个方法,该方法可以通过所需的任何属性检查来实现。 更好的是,使其

  • 问题内容: 我正在考虑一个应用程序的设计,该应用程序的主要功能围绕着找到所有给定集合的子集的集合的能力而展开。 例如,给定输入集A = {1,2,3 … 50}和集合集B = {B1 = {3,5,9,12},B2 = {1,6,100,123,45}。 .. B500 = {8,67,450}},返回所有属于A子集的B。 我想它与搜索引擎类似,除了我并没有设置A小而B大的奢侈。在我的情况下,B通

  • 出身背景我有数字1到20(黑色背景上的白色数字),可以出现在屏幕上,我希望识别这些数字。由于它们不能简单地复制粘贴,我将比较屏幕上数字的白色像素位置与所有20个数字的白色像素位置列表。然而,每个数字可以有大量的像素,并且可能不需要比较所有这些像素来识别该数字。因此,我希望尽可能少地进行比较。 算法问题:我有多个集合,其中的元素在每个集合中是唯一的,但在所有集合中可能不是唯一的。如何找到每个集合的最

  • 问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数:

  • 我正在使用Firebase Firestore作为BaaS构建一个应用程序。 但当我尝试在我的应用程序上创建提要/实现全文搜索时,我面临一个问题。 我希望能够搜索所有用户的帖子,问题是,用户帖子在Firestore数据库中的结构如下: 帖子(收藏)- 我想遍历每个用户的用户帖子子集合并获取提要的所有数据,并使用Algolia或ES等全文搜索应用程序来实现它。 > 我可以遍历特定的用户ID(代码如下

  • 问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数: