【问题标题】:Generating Power Set of a String Recursively in Java在Java中递归生成字符串的幂集
【发布时间】:2015-04-10 01:16:50
【问题描述】:

我正在尝试使用给定的一些伪代码来递归实现 Power Set 生成器,但是当给定一个像“abc”这样的字符串时,而不是有集合

{}、{a}、{b}、{c}、{a,b}、{a,c}、{b,c} 和 {a,b,c},

我得到 {}、{0}、{1}、{2}、{0,1} 等。

public static ArrayList GenerateSubsets(String setString) {
      ArrayList A = new ArrayList<String>();
      ArrayList temp = new ArrayList<String>();
      if(setString.length() > 0) {
         temp = GenerateSubsets(setString.substring(0,setString.length() - 1));
         for(int i = 0; i < temp.size(); i++) {
            System.out.println("Temp i: "+temp.get(i));
            A.add(temp.get(i));
            A.add(temp.get(i) + " " + (setString.length() - 1));
         }
         return A;
      }
      else
         A.add("");
         return A;
   }

这是直接基于伪代码的,为什么不能正常工作?

编辑:这是测试

public static void main(String[] args) {
  ArrayList one = GenerateSubsets("abcd");
  for(int i = 0; i < one.size(); i++) {
     System.out.print(one.get(i)+ ", ");
     if(i%5 == 0) {
        System.out.println("");
     }
  }

}

我得到了(没有换行符)的输出

, 3, 2, 2 3, 1, 1 3, 1 2, 1 2 3, 0, 0 3, 0 2, 0 2 3, 0 1, 0 1 3, 0 1 2, 0 1 2 3,

【问题讨论】:

  • println 语句打印什么?它是否打印正确的值?
  • 我在上面添加了测试和输出
  • 您似乎在添加索引而不是这些索引处的值。

标签: java recursion


【解决方案1】:

Statement (setString.length() - 1) 为您提供 char 的索引。通过连接它,您会收到一组 Power 索引。您需要使用setString.charAt(setString.length()-1) 在给定位置接收字符。

【讨论】:

  • 我刚刚收到了伪代码的编辑版本,更改该行解决了我的问题。谢谢!
  • P.S.另外,对我来说,使用substring()charAt() 直接操作字符串不是最佳实践。在我看来,操纵 char 数组会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多