用Java递归生成字符串的幂集

时间:2015-04-10 01:16:51

标签: java recursion

我试图按照我给出的某些伪代码执行功率集生成器的递归实现,但是当给出类似" 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,3 3,1 1,3 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,

1 个答案:

答案 0 :(得分:1)

语句(setString.length() - 1)为您提供char的索引。通过连接它,您将获得一组Power索引。您需要使用setString.charAt(setString.length()-1)在给定位置接收char。