【问题标题】:Generate a list of all permutations without repetition 2^9生成所有排列的列表,不重复 2^9
【发布时间】:2013-03-27 12:37:13
【问题描述】:

我一直像疯子一样在谷歌上搜索,但找不到任何足以让我开始的具体内容。请原谅我完全的菜鸟和可能恶魔般的略读能力。

基本上,我有一份包含 9 个问题的问卷,每个问题都有 2 个可能的答案。算了一下(2^9),我知道有 512 个排列。

我希望生成所有排列的列表,没有任何重复,为我提供可能的答案组合列表。

我希望我的输出看起来像这样:

112112111

其中 1 表示该人为某个问题选择了答案“a”,而 2s 表示该人选择了答案“b”。

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: java permutation combinations


    【解决方案1】:

    您只是在枚举 0 到 512 之间的数字,并且您想以二进制表示形式打印字符串,用 0 和 1 替换为 1 和 2,并适当填充,因此以下代码将起作用:

        for (int i = 0; i < 512; i++) {
            System.out.println(String.format("%9s", Integer.toBinaryString(i)).replace('1', '2').replace('0', '1').replace(' ', '1'));
        }
    

    有关在 Java 中生成填充二进制字符串的相关问题:How to get 0-padded binary representation of an integer in java?

    【讨论】:

      【解决方案2】:

      一种可能的方法是查找 111111111 和 222222222 之间仅包含 1 和 2 的所有数字。

      类似:

      for (i=111111111 ; i<=222222222 ; i++)
          if (number_has_only_one_or_twos(i))
               print i
      

      【讨论】:

        【解决方案3】:

        如果我正确阅读了您的问题,您只是想要 0 到 511 之间数字的二进制表示(因为 511 - 0 + 1 = 512)。您需要做的就是找到该范围内每个数字的 9 位二进制表示。取 0 表示答案 B,​​取 1 表示答案 A。

        您可以轻松地将二进制数转换为字符串并将 0 替换为 2 并打印出来。这就是数字二进制表示的美妙之处。这是查找给定范围内所有排列的最佳方法之一。

        想象一下找出数组中所有元素的排列。将数字范围从零到数组的大小,取 1 表示您要使用该索引,取 0 表示不使用该索引。每当您遇到它时,它将大大简化该问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-14
          • 1970-01-01
          • 2013-02-15
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          • 2012-06-21
          相关资源
          最近更新 更多